我正在使用 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()
更新值为 length
在pop()
之后?或者它会保持与 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/