在 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 中删除特定元素。但是,您遇到两个问题:
解决方案
基于范围的 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中文网其他相关文章!