我正在尝试删除与玩家相撞的 vector 的任何元素。但是,当我尝试从 vector 中删除该元素时,程序崩溃,并且出现了错误; “ vector 迭代器不增量”。
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;
}
}