我试图删除这个向量中任何与播放器发生碰撞的元素。但是,当我试图从向量中删除元素时,程序会崩溃,并得到错误;“向量迭代器而不是增量”。
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()”,但都没有效果。在这方面的任何帮助都将是伟大的,谢谢提前!
发布于 2014-04-27 20:00:50
这件事已经讨论到死了。不能对无效的迭代器进行操作。你想要这样的东西:
for (auto it = CoinSet.begin(); it != CoinSet.end(); /* no increment here! */ )
{
if (/* ... */)
{
// ...
CoinSet.erase(it++);
}
else
{
++it;
}
}发布于 2018-07-05 08:12:32
我不喜欢把+-语句放在参数中。因此,erase()返回指向下一个元素的迭代器,因此可以将擦除行替换为:
it = CoinSet.erase(it); // iterator is replaced with valid onehttps://stackoverflow.com/questions/23328285
复制相似问题