我想在迭代向量时删除某些元素,但下面的代码会导致“向量迭代器不可递增”断言失败。
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
}
}
这段代码有什么问题?
仅当您在该迭代中不删除任何元素时才应该增加迭代器:
for(auto iter=vec.begin(); iter!=vec.end();)
{
if((*iter).isDead())
{
std::swap(*iter, vec.back());//swap with the back
vec.pop_back(); //erase the element
}
else
++iter;
}
或者更好的是,将整个循环替换为remove_if
:
vec.erase(std::remove_if(vec.begin(), vec.end(),
std::bind(&ValueType::isDead, _1)), vec.end());
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)