基于条件语句删除循环中的向量元素

OMG*_*chy 0 c++ iterator vector

在这段代码片段中,Update()返回一个布尔值,如果返回false,我想从向量中删除该元素.

但是,这会产生调试断言失败的运行时错误.表达式是"矢量迭代器不可递增".

代码:

for(auto iter = someVector.begin(); iter != someVector.end(); ++iter){
    if(!iter->get()->Update()) iter = someVector.erase(iter);
}
Run Code Online (Sandbox Code Playgroud)

我试过从迭代器中减去如下:

for(auto iter = particles.begin(); iter != particles.end(); ++iter){
    if(!iter->get()->Update()) iter = --(particles.erase(iter));
}
Run Code Online (Sandbox Code Playgroud)

...但这导致"矢量迭代器不可减少".

如何使我的代码按预期工作; 以便在Update()函数返回false时删除vector元素?

jro*_*rok 5

将循环更改为:

for(auto iter = someVector.begin(); iter != someVector.end();){
    if(!iter->get()->Update())
        iter = someVector.erase(iter);
    else
        ++it;
}
Run Code Online (Sandbox Code Playgroud)

断言的原因是,在调用之后erase,iter可能等于end().返回的迭代器erase已经是"下一个",你不应该增加它.