2014-04-27 108 views
0

我想刪除此向量與玩家碰撞的任何元素。但是,當我嘗試從矢量中刪除元素時,程序崩潰,並且出現錯誤; 「向量迭代器不增量」。向量迭代器不增量.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()」 在不同的點,但無濟於事。任何幫助,這將是非常好的,在此先感謝!

回答

3

這已被討論爲死亡。您不得對無效的迭代器進行操作。你想要的東西是這樣的:

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',所以繼續拼寫出類型。 –