我有一个IInventory*的向量,我正在使用C++ 11范围循环遍历列表,以便对每个进行处理.
在做了一些东西之后,我可能想要从列表中删除它并删除对象.我知道我可以随时调用delete指针来清理它,但是在范围for循环中,从矢量中删除它的正确方法是什么?如果我从列表中删除它将使我的循环失效?
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'...
}
Run Code Online (Sandbox Code Playgroud) 我有一个向量,我正在搜索其中的元素,同时用for-each循环迭代向量.如果我在搜索过程中发现任何无效元素,我想将它们从向量中删除.
基本上,我想做这样的事情:
for (auto el : vec) {
if (el == whatImLookingFor) {
return el;
} else if (isInvalid(el)) {
vec.erase(el);
}
}
Run Code Online (Sandbox Code Playgroud)
我看了一些像这样和这个的其他问题,但都推荐使用std::remove_if.这将迭代整个向量并删除所有无效元素,而不是仅迭代直到找到我正在寻找的元素,并忽略之后的任何元素.
这样做有什么好办法?