簡體   English   中英

向量迭代器不是增量.erase()

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM