c ++在遍历所有迭代器的同时擦除std :: vector.end()

Der*_*rek 2 c++ standard-library

我想从向量中删除一些迭代器,所以这就是我现在所拥有的.

void function(std::vector <class*> & vector)
{
    std::vector <class*>::iterator it;
    for(it = vector.begin(); iter != vector.end(); ++iter)
        {
            if(it->value == 1)
                vector.erase(it);
        }
    Display(vector);
    return;
}
Run Code Online (Sandbox Code Playgroud)

显然,当迭代器被移除时,这个代码给了我一个错误,它是向量中的最后一个,否则看起来它工作正常.我知道在这样的循环中修改向量可能不是理想的行为,但如果我必须这样做,那么最好的方法是什么?

谢谢.

Ben*_*ley 5

for (it = vector.begin(); it != vector.end(); )
{
    if (it->value == 1)
        it = vector.erase(it);
    else
        ++it;
}
Run Code Online (Sandbox Code Playgroud)

但对于这种情况,您实际上应该使用std::remove_if适当的谓词.