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

在 C 11 中迭代时如何安全地从向量中删除元素?

Mary-Kate Olsen
发布: 2024-11-28 20:56:11
原创
380 人浏览过

How to Safely Remove Elements from a Vector While Iterating in C  11?

在 C 11 基于范围的循环期间从向量中删除元素

C 11 中基于范围的 for 循环提供了一种便捷的迭代方式容器的元素,特别是当您需要对每个元素执行操作时。但是,在处理向量时,有时可能需要在迭代向量时从向量中删除元素。

问题

考虑以下代码:

std::vector<IInventory*> inv;
inv.push_back(new Foo());
inv.push_back(new Bar());

for (IInventory* index : inv)
{
    // Do some stuff
    // ...
}
登录后复制

在循环内,您意识到需要从向量 inv 中删除特定元素。但是,您遇到两个问题:

  1. 无法删除元素:基于范围的 for 循环不提供在迭代向量时修改向量的方法。
  2. 循环有效性:从向量中删除元素可能会使向量无效

解决方案

基于范围的 for 循环适用于仅需要访问容器的每个元素一次的情况。如果需要在迭代期间修改或删除元素,则应使用传统的 for 循环或其基于迭代器的变体之一。

以下是如何使用具有迭代器增量管理的传统 for 循环修改代码:

for (auto i = inv.begin(); i != inv.end(); /*++i*/) {
    // Do stuff
    if (should_remove) {
        i = inv.erase(i);
    } else {
        ++i;
    }
}
登录后复制

通过显式管理迭代器增量,您可以维护循环的有效性,并确保您可以删除和修改元素而不会遇到任何错误。

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

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