迭代器失效问题一般是指对于stl容器来说,调用erase某迭代器之后,就不能再使用这个iterator了。
解决方法:
(1):erase(iter++);这样可以继续使用该iter
(2):it=erase(iter);这是利用erase函数的返回值,一般的erase函数都会返回一个删除迭代器的后继迭代器。
如果是erase(iter);iter++;这样不能继续使用iter,它已经失效了。
例子:
int main()
{
set<int> p={1,2,3};
for(auto it=p.begin();it!=p.end();){
if(*it==2){
p.erase(it++);
}
else{
it++;
}
}
for(auto it=p.begin();it!=p.end();++it){
cout<<*it<<endl;
}
return 0;
}
如果把p.erase(it++);改成p.erase(it);++it;就会报错。
来源:https://www.cnblogs.com/FdWzy/p/12563413.html