迭代器失效问题一般是指对于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