可能是重复问题:
在迭代std :: list时,是否可以从中删除元素?
我有一个循环,它在函数中从头到尾迭代一个std :: list
。
在每次循环中,我会对当前列表条目执行一些检查,可能会进行一些操作,在某些情况下,我希望将其从列表中删除。
现在,如预期的那样,我的迭代器失效了。
- 是否有任何方法可以解决这个问题,即在迭代std :: list时从中删除元素?
可能是重复问题:
在迭代std :: list时,是否可以从中删除元素?
我有一个循环,它在函数中从头到尾迭代一个std :: list
。
在每次循环中,我会对当前列表条目执行一些检查,可能会进行一些操作,在某些情况下,我希望将其从列表中删除。
现在,如预期的那样,我的迭代器失效了。
捕获erase
的返回值,并将其用作迭代器。返回值是擦除后下一个有效位置的迭代器。
if(ShouldErase)
{
iter = list.erase(iter);
}
else
{
++iter;
}
摘要:
返回值
一个双向迭代器,指向函数调用所删除的最后一个元素后面的元素的新位置,如果该操作删除了序列中的最后一个元素,则为列表结尾。
使用后缀递增。
list.erase(it++);
it
被增加了,因此它不再指向已经删除的元素,然后list.erase
获得it
的先前值。确保在循环中只执行list.erase(it++)
或++it
其中之一 - 两者都执行将会跳过元素并可能使迭代器超出列表末尾。
list::remove_if
算法吗?