问题的关键是:在删除元素之前,将当前迭代器保存下来。当然,这里仅支持list,因为list的链式的删除一个元素,前面的指针指向下一个元素,vector和queue就不好办了,它们或者是线性的或者是半线性半链式,迭代器会失效
#include<iostream>
#include<list>
using namespace std;
int main()
{
list<int *> l;
for(int i=1;i<=100;i++)
{
int* temp=new int;
*temp=i;
l.push_back(temp);
}
list<int *>::iterator it=l.begin();
list<int *>::iterator ittemp=l.begin();
for(;it!=l.end();++it)
{
cout<<*(*it)<<endl;
}
it=l.begin();
ittemp=l.begin();
for(;it!=l.end();)
{
ittemp=it;
++it;
delete (*ittemp);
l.erase(ittemp);
}
cout<<l.size()<<endl;
return 0;
}
关注微信公众号,获取更多资料