首頁 >後端開發 >C++ >如何在 C 循環迭代期間安全地從向量中刪除元素?

如何在 C 循環迭代期間安全地從向量中刪除元素?

Barbara Streisand
Barbara Streisand原創
2024-12-06 14:45:13925瀏覽

How to Safely Remove Elements from a Vector During Loop Iteration in C  ?

在循環內從向量中刪除元素

了解如何在循環迭代期間有效地從向量中刪除元素至關重要。嘗試使用下列程式碼執行此操作可能會導致錯誤:

for (vector<Player>::iterator it = allPlayers.begin(); it != allPlayers.end(); it++)
{
    if(it->getpMoney() <= 0)
        it = allPlayers.erase(it);
    else
        ++it;
}

錯誤訊息「operator '=' function is unavailable in 'Player'」表示向量中的物件不能直接重新指派。要解決此問題,Player 類別必須實作賦值運算子 (=)。

此外,應修改for 循環以避免明確遞增迭代器,因為這已在內部處理:

for (vector<Player>::iterator it = allPlayers.begin(); it != allPlayers.end(); )
{
    if(it->getpMoney() <= 0)
        it = allPlayers.erase(it);
    else
        ++it;
}

不要使用原始循環,建議使用擦除刪除慣用法來提高效率:

allPlayers.erase(
    std::remove_if(
        allPlayers.begin(),
        allPlayers.end(),
        [](Player const &amp; p) { return p.getpMoney() <= 0; }
    ),
    allPlayers.end()
);

這個idiom 使用remove_if演算法過濾掉滿足指定條件的元素(在本例中為零錢或負錢的玩家),然後使用erase 函數將它們從向量中刪除。

以上是如何在 C 循環迭代期間安全地從向量中刪除元素?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn