首页 >后端开发 >C++ >我们可以从 C 11 基于范围的 For 循环内的向量中删除元素吗?

我们可以从 C 11 基于范围的 For 循环内的向量中删除元素吗?

Barbara Streisand
Barbara Streisand原创
2024-12-06 01:32:09856浏览

Can We Remove Elements from a Vector Inside a C  11 Range-Based For Loop?

在 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
    // I need to remove this object from 'inv'...
}

我们可以删除基于范围的循环中的元素吗?

不可以,您无法在基于范围的 for 循环内从向量中删除元素。这是因为循环通过创建向量迭代器的副本进行操作,如果删除或添加元素,该副本就会失效。

因此,考虑在迭代期间修改容器的替代方法至关重要。

推荐的解决方案

推荐的方法是使用传统的 for 循环或其变体之一。这允许您直接操作向量并根据需要删除元素。例如:

auto i = std::begin(inv);

while (i != std::end(inv)) {
    // Do some stuff
    if (blah)
        i = inv.erase(i);
    else
        ++i;
}

以上是我们可以从 C 11 基于范围的 For 循环内的向量中删除元素吗?的详细内容。更多信息请关注PHP中文网其他相关文章!

声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn