c++ - c++中的for循环迭代

标签 c++ arrays

我正在使用 C++ 中的动态分配数组构建一个简单的列表。我有一个函数 remove(int item)这应该删除所有出现的 item在列表中。但是,如果我创建一个从 0 迭代的循环至 length在数组中,我担心我会超出数组的边界,因为 length当我删除项目时发生变化:

int List::pop(int index)
{
  int retval = data[index];
  for (int i = index; i < length; i++)
    data[i] = data[i+1];
  length--;
  return retval;
}

void List::remove(int item)
{
  for (int i = 0; i < length; i++) {
    if (data[i] == item)
      pop(i);
}

所以,如果我调用 remove(6)array[6][4][2][6][1][3][5][6] , C++ 会更新 for循环 remove()更新值为 lengthpop()之后?或者它会保持与 remove() 时最初传递给它的相同值吗?被叫了?

最佳答案

另一种解决方案是反向搜索。只保留那些不等于要删除的项目。

void List::remove(int item)
{
    int insert = 0;
    for (int i = 0; i < length; i++) {
        if (data[i] != item)
          data[insert++] = data[i];
    }
    length = insert;
}

关于c++ - c++中的for循环迭代,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5509001/

相关文章:

mysql - Rails - 如何从对象中获取随机记录?

c++ - C++中相同指针的两个优先级队列

c++ - 采用 2D 输入并同时按行排序的最快方法

c++ - 在 OS X 上部署 Qt 应用程序时出错

arrays - SWIFT:具有 "direct"访问权限的快速阵列

java - Groovy 用可能的字符串分割字符串

c++ - 从模板化基类覆盖方法时出现问题

c++ - 返回值优化和析构函数调用

python - 沿多个轴花式索引 numpy 数组的最佳实践

postgresql - 如何获取存储在 PostgreSQL 中的 bytea 的 MIME 类型