关于链表删除元素操作的注意点

list<Object> L2;
list<Object> lst;
iter = lst.begin(); for(auto i= L2.begin();i!=L2.end();++i) //position2 for (auto it = iter; it != lst.end(); ++it) { if(*i==*it) { L2.erase(i); //position1 iter = ++it; break; } }

此段代码有错误,错误为 Expression:cannot increment value-initialized list iterator

翻译过来也就是:无法 增量 值已经初始化的 链表迭代器

也就是说链表迭代器无法自增

那么,为什么会发生这种情况呢?

其实仔细观察,我们会发现:

position1 位置的表达式一旦执行,当前的 i 迭代器立即从 L2 链表的迭代器中移除

(就像节点一样从链表中移除,具体实现为 该节点的前一个节点直接指向该节点的后一个节点)

因此,我们无法在 position2 位置再对移除的迭代器 i 进行自增操作了。因此,程序便无法正常运行。

猜你喜欢

转载自www.cnblogs.com/lhb666aboluo/p/12715063.html