我正在尝试删除与玩家相撞的 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;
    }
}

09-03 21:29