gpt4 book ai didi

c++ - 从 vector 中删除项目,而在 C++11 范围 'for' 循环中?

转载 作者:IT老高 更新时间:2023-10-28 11:58:29 25 4
gpt4 key购买 nike

我有一个 IInventory* vector ,我正在使用 C++11 范围遍历列表,以便对每个 vector 进行处理。

在用一个做一些事情之后,我可能想从列表中删除它并删除该对象。我知道我可以随时在指针上调用 delete 来清理它,但是在 for 循环范围内从 vector 中删除它的正确方法是什么?如果我从列表中删除它,我的循环是否会失效?

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

for (IInventory* index : inv)
{
// Do some stuff
// OK, I decided 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++ - 从 vector 中删除项目,而在 C++11 范围 'for' 循环中?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10360461/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com