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元素?
将循环更改为:
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已经是"下一个",你不应该增加它.
| 归档时间: |
|
| 查看次数: |
1156 次 |
| 最近记录: |