不可以直接删除,会导致迭代器失效,然后引发段错误,
应该先把要删除的成员备份,然后把迭代器++,然后再删除备份的成员,代码示例如下:
#include <list>
#include <algorithm>
#include <iostream>
using namespace std;
void printlist(const list<int> l)
{
for(auto it=l.begin();it!=l.end();it++)
{
cout<<*it<<" ";
}
cout<<endl;
}
int main()
{
list<int> ll;
for(int i=0;i<10;i++)
{
ll.push_front(i);
}
cout<<"ori:"<<endl;
printlist(ll);
for(auto it=ll.begin();it!=ll.end();it++)
{
if(*it%2==0)
{
auto bak=it;
it++;
ll.erase(bak);
}
}
cout<<"after del:"<<endl;
printlist(ll);
}