遍历时删除元素的正确写法:
list<int> l;
for (list<int>::iterator iter=l.begin();iter!=l.end;)
{
if (condition (*iter) == 0 )
{
iter=l.erase(iter); // 注意此处要用iter接受l.erase(iter)的返回值
}
else
{
++iter;
}
}
删除头部第一个元素的正确写法:
// 写法一
g_listDownloadTask.pop_front(); // 删除第一个元素
// 写法二
auto iter = g_listDownloadTask.begin();
if (iter != g_listDownloadTask.end())
{
iter = g_listDownloadTask.erase(iter); //g_listDownloadTask.erase(iter++);
}
else
{
++iter;
}
写法一和写法二等价吗?
这篇博客探讨了在C++中如何正确使用`std::list::remove_if`和`pop_front`删除元素。文章通过示例展示了在遍历过程中删除元素的迭代器管理技巧,以及删除列表头部元素的两种等价写法。内容强调了在删除元素时更新迭代器的重要性,以避免迭代器失效。
2336

被折叠的 条评论
为什么被折叠?



