我在一个函数中有一个循环,它从头到尾迭代std::list.
在每个循环中,我执行一些检查,并可能对当前列表条目进行一些操作,在某些情况下,我想从列表中删除它.
现在,正如预期的那样,我的迭代器变得无效.
Sio*_*vok 15
捕获返回值erase并将其用作迭代器.返回值是擦除后到下一个有效位置的迭代器.
if(ShouldErase)
{
iter = list.erase(iter);
}
else
{
++iter;
}
Run Code Online (Sandbox Code Playgroud)
摘抄:
返回值
一个双向迭代器,指向函数调用擦除的最后一个元素之后的元素的新位置,如果操作擦除了序列中的最后一个元素,则该列表结束.
Eri*_*rik 14
使用后缀增量.
list.erase(it++);
Run Code Online (Sandbox Code Playgroud)
it增加,所以它不再引用已擦除的元素,然后it给出之前的值list.erase.请确保您无论是做list.erase(it++)还是++it在你的循环-这两项工作会跳过元素和潜在增加过去列表的末尾.