[英]Vector iterator not incremental .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;
}
}
我不喜歡將++語句放入參數中。 因此,delete()返回一個指向下一個元素的迭代器,因此可以將擦除行替換為:
it = CoinSet.erase(it); // iterator is replaced with valid one
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.