首页 > 后端开发 > C++ > 在 C 迭代过程中删除映射元素时会发生什么?

在 C 迭代过程中删除映射元素时会发生什么?

Patricia Arquette
发布: 2024-12-16 15:24:11
原创
292 人浏览过

What Happens When Erasing a Map Element During Iteration in C  ?

在从 Begin 到 End 迭代期间对映射元素调用擦除() 会发生什么?

在 C 03 中,删除映射中的元素会使指向该元素的迭代器无效。然而,在 C 11 及更高版本中,擦除方法返回下一个迭代器,从而允许在删除元素后进行安全迭代。

C 03 的解决方案

在 C 中03,为了确保从映射中删除元素后的安全迭代,请更新代码以使用 map::erase() 返回的迭代器并执行后增量调用erase()后的迭代器。

map<string serialdmsg::serialfunction_t>::iterator pm_it = port_map.begin();<br>while(pm_it != port_map.end())<br>{<pre class="brush:php;toolbar:false">if (pm_it->second == delete_this_id)
{
    port_map.erase(pm_it++);  // Use iterator.
                              // Note the post increment.
                              // Increments the iterator but returns the
                              // original value for use by erase 
}
else
{
    ++pm_it;           // Can use pre-increment in this case
                       // To make sure you have the efficient version
}
登录后复制

}

C 11 及更高版本的解决方案

在 C 11 及更高版本中,erase() 返回下一个迭代器,使其安全使用以下语法同时迭代和删除元素:

<br>auto pm_it = port_map.begin();<br>while(pm_it != port_map.end())<br>{<pre class="brush:php;toolbar:false">if (pm_it->second == delete_this_id)
{
    pm_it = port_map.erase(pm_it);
}
else
{
    ++pm_it;
}
登录后复制

}

以上是在 C 迭代过程中删除映射元素时会发生什么?的详细内容。更多信息请关注PHP中文网其他相关文章!

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