以下代码存在什么问题,请指出,并将修改后的代码贴出。 vector<int> vecTest = { 1,2,3,4 }; vector<int>::iterator iter1; for (iter1 = vecTest.begin(); iter1 != vecTest.end(); iter1++) { printf("%d ", *iter1); if (*iter1 == 3) { vecTest.erase(iter1); } }
时间: 2024-03-06 17:50:20 浏览: 94
通过代码实例解析c++ vector常用方法
以上代码在循环中使用迭代器iter1遍历vector容器vecTest,并在循环体中使用erase函数删除vector中的元素,这样会导致迭代器失效,可能会导致程序崩溃或者出现未定义的行为。
为了避免以上问题,可以在循环中使用while循环,每次删除元素后重新获取迭代器,以避免迭代器失效的问题。
修改后的代码如下:
```c++
vector<int> vecTest = { 1,2,3,4 };
vector<int>::iterator iter1 = vecTest.begin();
while (iter1 != vecTest.end()) {
printf("%d ", *iter1);
if (*iter1 == 3) {
iter1 = vecTest.erase(iter1);
}
else {
iter1++;
}
}
```
这样就可以避免迭代器失效的问题。
阅读全文