相关疑难解决方法(0)

从向量中删除项目,而在C++ 11范围内'for'循环?

我有一个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)

c++ for-loop vector c++11

91
推荐指数
4
解决办法
6万
查看次数

删除for-each循环中的一些向量元素,而不迭代整个向量

我有一个向量,我正在搜索其中的元素,同时用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.这将迭代整个向量并删除所有无效元素,而不是仅迭代直到找到我正在寻找的元素,并忽略之后的任何元素.

这样做有什么好办法?

c++ iterator c++11

12
推荐指数
3
解决办法
973
查看次数

标签 统计

c++ ×2

c++11 ×2

for-loop ×1

iterator ×1

vector ×1