首页 > 后端开发 > C++ > 如何在迭代时安全地从 C std::list 中删除元素?

如何在迭代时安全地从 C std::list 中删除元素?

Linda Hamilton
发布: 2024-12-24 14:07:16
原创
169 人浏览过

How to Safely Remove Elements from a C   std::list While Iterating?

C std::List 中的迭代元素移除

在 C 中,std::list 是一个提供双向链表数据的容器结构。迭代列表时,可能需要根据特定条件删除元素。当直接在迭代循环中删除项目导致“列表迭代器不可递增”错误时,就会出现此问题。

要解决此问题,必须在删除前一个元素之前先递增迭代器 (i )。这可以通过使用 while 循环来实现,如下所示:

std::list<item*>::iterator i = items.begin();
while (i != items.end())
{
    bool isActive = (*i)->update();
    if (!isActive)
    {
        items.erase(i++); // alternatively, i = items.erase(i);
    }
    else
    {
        other_code_involving(*i);
        ++i;
    }
}
登录后复制

在这个修改后的代码中,迭代器 i 在循环内递增,允许 items.erase(i ) 操作成功删除前一个元素。或者,可以将 i 替换为 i = items.erase(i) 以获得相同的效果。

通过实施这种方法,可以在满足所需条件后立即有效地删除项目,从而无需额外的传递通过列表。

以上是如何在迭代时安全地从 C std::list 中删除元素?的详细内容。更多信息请关注PHP中文网其他相关文章!

来源:php.cn
本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
作者最新文章
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板