c++中,list是个链表,当遍历过程中删除当前节点,在下一次循环时,对已删除iterator节点进行递加操作,将导致错误。那么,我们可以在删除前先保存要删除的节点,然后将循环变量后移,再删除要移除的节点,就不会出现问题了。以下是示意代码。
#include <list>
using namespace std;
int main(int argc, char* argv[])
{
list<int> ls;
for (int i=0; i<6; ++i)
{
ls.push_back(i);
}
list<int>::iterator it = ls.begin();
for (; it != ls.end(); )
{
int d = (*it);
list<int>::iterator del_it = it;
it++; //先移动
if (d == 2 || d == 4)
{
ls.erase(del_it);
}
}
return 0;
}