首页 > 后端开发 > C++ > 正文

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

Patricia Arquette
发布: 2024-11-02 02:52:30
原创
360 人浏览过

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

迭代时有效地从 std::vector 中删除元素

在 C 编程领域,开发人员经常遇到操作 std::vector 的挑战::向量,同时遍历其元素。虽然迭代器为此任务提供了一种方便的机制,但在迭代过程中尝试删除元素时会出现一个常见的陷阱。

考虑 std::vector<:string> 的场景。用于存储文件路径列表。目标是删除每个文件并从向量中删除其路径。然而,使用传统方法,例如擦除()方法,每次删除后都会使迭代器失效,从而使进一步的遍历变得复杂。

为了克服这一限制,开发人员设计了一种更有效的方法。调用时,erase() 方法不仅会删除指定元素,还会返回一个指向下一个元素的新迭代器。这种独特的行为允许循环顺利继续:

<code class="cpp">std::vector<std::string>::iterator iter;
for (iter = m_vPaths.begin(); iter != m_vPaths.end(); ) {
    if (::DeleteFile(iter->c_str()))
        iter = m_vPaths.erase(iter);
    else
        ++iter;
}</code>
登录后复制

在此代码片段中,循环按预期继续,每次删除后 iter 都会自动更新为指向下一个有效元素。这种有效的方法消除了对额外向量的需要,并简化了迭代时删除元素的过程。

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

来源:php.cn
本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
作者最新文章
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责声明 Sitemap
PHP中文网:公益在线PHP培训,帮助PHP学习者快速成长!