我正在尝试删除此向量与播放器发生冲突的任何元素。但是,当我尝试从向量中删除元素时程序崩溃,我得到错误; “vector iterator not incremental”。
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()”,但无济于事。对此的任何帮助都会很棒,提前谢谢!
答案 0 :(得分:3)
这已被讨论过死亡。您不能对无效的迭代器进行操作。你想要这样的东西:
for (auto it = CoinSet.begin(); it != CoinSet.end(); /* no increment here! */ )
{
if (/* ... */)
{
// ...
CoinSet.erase(it++);
}
else
{
++it;
}
}
答案 1 :(得分:0)
我不喜欢将++语句放入参数中。因此,delete()返回一个指向下一个元素的迭代器,因此可以将擦除行替换为:
it = CoinSet.erase(it); // iterator is replaced with valid one