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