当list使用erase时,会使当前被删除元素的迭代器失效,如何解决这一问题。
看c++primer中是采取以下第一种方法
1)for (list<int>::iterator iter=l.begin();iter!=l.end();++iter)
{
if (condition(*iter))
{
iter=l.erase(iter);
--iter;
}
}
在写测试程序时,发现该种方法会有BUG,即当我刚好满足条件需删去的值为list中第一个值时,此时删除后iter指向当前list中的第一个值,但是--iter操作会导致程序DUMP,因为--操作会使iter指向未知内存。
故只能采取网上公认的第二种方法,才会保证无误。
2)for (list<int>::iterator iter=l.begin();iter!=l.end;)
{
if condition (*iter))
{
iter=l.erase(iter);
//--iter;
}
else
{
++iter;
}
}