向量迭代器不增量.erase()
问题描述:
我想删除此向量与玩家碰撞的任何元素。但是,当我尝试从矢量中删除元素时,程序崩溃,并且出现错误; “向量迭代器不增量”。向量迭代器不增量.erase()
for (std::vector<Coin>::iterator i=CoinSet.begin(); i!=CoinSet.end(); i++)
{
if (i->PlayerClear(player.collider()) == true)
{
score++;
cout<<score<<endl;
CoinSet.erase(i);
}
}
此代码工作得很好,直到 “CoinSet.erase(I)”,我尝试使用 “CoinSet.clear()” 在不同的点,但无济于事。任何帮助,这将是非常好的,在此先感谢!
答
这已被讨论为死亡。您不得对无效的迭代器进行操作。你想要的东西是这样的:
for (auto it = CoinSet.begin(); it != CoinSet.end(); /* no increment here! */)
{
if (/* ... */)
{
// ...
CoinSet.erase(it++);
}
else
{
++it;
}
}
非常感谢,我确实花了一小时研究发布之前,但没有发现太多相关(我很新)。反正我现在得到错误“矢量迭代器不兼容”? – user3027864
@ user3027864:调试器会为你节省下你生活中的那些时间...... –
@ user3027864:如果你的编译器不支持C++ 11,那么你不能使用'auto',所以继续拼写出类型。 –