迭代器失效:
1、对于在内存中连续分布的容器(vector、queue、deque),插入或者删除会使插入或者删除点的迭代器以及之后的迭代器失效。
2。对于非连续存储的容器(list,forword_list,map),插入或删除仅仅使插入或者删除点迭代器失效。
解决方法:
1、对于连续内存容器或者非连续内存容器,使用 iter=erase(iter)对迭代器重新赋值,erase会返回一个有效的迭代器。
2、对于非连续内存容器,还可以使用一个临时迭代器 temp=iter; temp++; erase(iter)。
代码:
#include <iostream>
#include<vector>
using namespace std;
int main()
{
vector<int> a{1,2,2,3,4,2};
for(vector<int>::iterator it=a.begin();it!=a.end();)
{
if(*it==2)
it=a.erase(it); //获得有效的迭代器
else
++it;
}
for(auto i:a)
cout << i << endl;
return 0;
}