在基于范围的 for 循环中管理向量元素
在 C 11 中,基于范围的 for 循环提供了一种方便的方法来迭代容器的元素。但是,某些操作(例如从向量中删除元素)在这些循环中会出现问题。
在 C 11 基于范围的 for 循环期间可以从向量中删除元素吗?
不幸的是,没有。基于范围的 for 循环设计用于容器中每个元素的一次性迭代。它们不适合修改容器本身,包括删除元素。
元素删除的替代方法:
要从循环内的向量中删除元素,必须使用传统的 for 循环或其变体。这些允许对容器进行修改和非线性遍历。
示例:
auto i = std::begin(inv); while (i != std::end(inv)) { // Do some stuff if (blah) i = inv.erase(i); else ++i; }
通过使用 std::begin 和 std::end 函数,循环使用迭代器迭代向量。当一个元素被标记为删除时,将调用擦除函数,这将使指向已删除元素的迭代器无效。然后循环继续推进迭代器。
总之,虽然基于范围的 for 循环为只读迭代提供了易用性,但对于从向量中删除元素等操作,您需要使用传统的 for 循环来保持对容器修改的控制。
以上是您可以在 C 11 基于范围的 For 循环期间从向量中删除元素吗?的详细内容。更多信息请关注PHP中文网其他相关文章!