问题的关键是:在删除元素之前,将当前迭代器保存下来。当然,这里仅支持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;
}关注微信公众号,获取更多资料

本文介绍了一种在C++中如何安全地从list容器中删除元素的方法,并提供了具体的代码实现。通过保存当前迭代器的方式,确保了删除操作过程中迭代器的有效性。
1576

被折叠的 条评论
为什么被折叠?



