list遍历删除节点时,处理不好会出现崩溃的情况。
错误方法
下面这种用法会在for的地方崩溃,分析 第一次for循环的时候 it=0,当t.erase(it)执行完成之后 it就变成了 -17891602,表明it不能再作为迭代器进行运算,自然会报错。
void CExmp::removeelem(list<int> &li, int value)
{
for (list<int>::iterator it = li.begin(); it != li.end();++it)
{
if (value == *it)
li.erase(it);
}
}
正确方法
void CExmp::removeelem(list<int> &li, int value)
{
for (list<int>::iterator it = li.begin(); it != li.end();)
{
if (value == *it)
li.erase(it++);
else
++it;
}
}