首页 > 后端开发 > C++ > 如何在迭代过程中安全地从 C 映射中删除项目?

如何在迭代过程中安全地从 C 映射中删除项目?

Mary-Kate Olsen
发布: 2024-12-11 00:38:09
原创
403 人浏览过

How to Safely Remove Items from a C   Map During Iteration?

在 C 迭代期间从映射中删除项目

当迭代映射并尝试根据特定条件删除项目时,它是重要的是要考虑擦除元素对迭代器的影响。在迭代映射时擦除元素将使迭代器无效,从而难以继续迭代过程。

关联容器的标准擦除习惯用法

关联容器的标准习惯用法迭代时从关联容器(例如地图)中删除如下如下:

for (auto it = m.cbegin(); it != m.cend() /* not hoisted */; /* no increment */)
{
  if (must_delete)
  {
    m.erase(it++);    // or "it = m.erase(it)" since C++11
  }
  else
  {
    ++it;
  }
}
登录后复制

解释

  • 取消循环条件:这确保循环检查映射的末尾每次通过。
  • 在移除过程中不增加迭代器case: 当删除一个元素时,迭代器指向映射中的下一个元素。这意味着循环不应在擦除后递增迭代器。
  • 常量迭代器: 在 C 11 之前的版本中,无法擦除常量迭代器。在这种情况下,应该使用传统的迭代器(例如 std::map::iterator)。

通过遵循这个习惯用法,您可以安全地从地图中删除项目,同时迭代而不使迭代器无效。

以上是如何在迭代过程中安全地从 C 映射中删除项目?的详细内容。更多信息请关注PHP中文网其他相关文章!

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