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

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

Linda Hamilton
发布: 2024-12-20 13:01:21
原创
446 人浏览过

How to Safely Remove Elements from an `std::list` While Iterating?

你可以在迭代 std::list 的同时删除其中的元素吗?

在 C 中,内置的 std::list 类是双向链表,提供高效的元素插入和删除。然而,当尝试在迭代期间修改列表时,谨慎执行操作至关重要。

问题:迭代检查 std: 中项目的活动状态时发生错误:列出并尝试立即删除不活动的项目。删除元素后尝试移动迭代器时遇到错误“列表迭代器不可递增”。

解决方案:在迭代过程中成功删除元素的关键是将修改应用于迭代器首先,在执行删除之前。与其尝试递增迭代器然后删除元素,不如将循环重构为 while 循环,从而允许迭代器在循环本身内递增。因此,下面更新的代码演示了正确的方法:

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

此修改后的代码可确保迭代器在执行元素删除之前正确递增,从而避免错误并在迭代时有效删除不活动元素列表。

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

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