向量迭代器不增量.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; 
    } 
} 
+0

非常感谢,我确实花了一小时研究发布之前,但没有发现太多相关(我很新)。反正我现在得到错误“矢量迭代器不兼容”? – user3027864

+0

@ user3027864:调试器会为你节省下你生活中的那些时间...... –

+0

@ user3027864:如果你的编译器不支持C++ 11,那么你不能使用'auto',所以继续拼写出类型。 –