vector循环调用erase函数
时间: 2023-11-21 18:58:07 浏览: 104
在使用vector的循环中调用erase函数时,需要注意迭代器失效的问题。如果在循环中直接调用erase函数,会导致迭代器失效,从而导致程序崩溃。为了避免这种情况,可以使用以下两种方法:
方法一:使用while循环和迭代器,手动控制迭代器的移动。
```c++
vector<int> v1;
v1.push_back(10);
v1.push_back(10);
v1.push_back(20);
v1.push_back(30);
v1.push_back(40);
v1.push_back(10);
vector<int>::iterator iter = v1.begin();
while (iter != v1.end()) {
if (*iter == 10) {
iter = v1.erase(iter);
} else {
iter++;
}
}
```
方法二:在循环中使用后置递增运算符,可以避免迭代器失效的问题。
```c++
vector<int> v1;
v1.push_back(10);
v1.push_back(10);
v1.push_back(20);
v1.push_back(30);
v1.push_back(40);
v1.push_back(10);
for (vector<int>::iterator iter = v1.begin(); iter != v1.end(); ) {
if (*iter == 10) {
iter = v1.erase(iter);
} else {
iter++;
}
}
```
阅读全文