在 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中文网其他相关文章!