Vector迭代器遍历时通过erase删除元素的问题
2022-12-28 本文已影响0人
Duke丶Lee
vector迭代器遍历:
#include <vector>
#include <iostream>
int main(){
using namespace std;
vector<int> vec;
vec.push_back(1);
vec.push_back(2);
for(auto iter = vec.begin(); iter != vec.end(); ++iter){
cout << *iter << endl;
}
}
vector迭代器遍历时erase删除元素
#include <vector>
#include <iostream>
int main(){
using namespace std;
vector<int> vec;
vec.push_back(1);
vec.push_back(2);
// 取消++iter
for(auto iter = vec.begin(); iter != vec.end();){
if ((*iter) == 1){
//erase函数会返回下一个元素的迭代器指针
iter = vec.erase(iter);
}else{
//指向下一个元素
++iter;
}
}
}
erase函数会将迭代器指针iter变为野指针,此时若继续执行++iter,会导致iter指向未知位置,进而导致运行时Crash。所以将erase函数返回的迭代器指针赋值给iter。