我想在迭代向量时擦除某些元素,但是下面的代码导致“向量迭代器不可递增”断言失败 .
for(auto iter=vec.begin(); iter!=vec.end(); ++iter)
{
if((*iter).isDead())
{
std::swap(*iter, vec.back());//swap with the back
vec.pop_back(); //erase the element
}
}
这段代码有什么问题?
2 回答
您正在递增超过您与当前元素交换的元素;如果那是最后一个元素,那么你刚刚删除它并使你的迭代器失效 . 如果你没有擦除,你只想增加,使用类似的东西:
只有在不删除迭代中的任何元素时,才应增加迭代器:
或者甚至更好,用
remove_if
替换整个循环: