首頁 > 後端開發 > C++ > 如何安全地從循環內的 C 向量中刪除元素?

如何安全地從循環內的 C 向量中刪除元素?

Barbara Streisand
發布: 2024-12-10 07:58:09
原創
1033 人瀏覽過

How Can I Safely Remove Elements from a C   Vector Within a Loop?

擦除循環內的向量元素

在C 中,由於迭代器可能無效,因此在迭代期間操作向量可能會很棘手。本文解決了根據循環內的條件從向量中安全刪除元素的問題。

初始程式碼和錯誤訊息

原始問題中提供的程式碼嘗試在迭代向量時從向量中刪除元素。但是,它遇到錯誤訊息「'operator ='函數在'Player'中不可用。」

錯誤原因

發生錯誤是因為擦除( )方法內部使用賦值運算子(=) 來移動向量內的元素。 Player 類別缺少賦值運算子會導致擦除() 無法成功執行。

要解決此問題,程式碼應先實作賦值Player 類別的運算子。此外,它應該避免在循環內遞增迭代器 (it ),因為它會在每次迭代時自動更新。

替代方法:擦除刪除慣用語

The Erase-Remove Idiom 為這個問題提供了更優雅、更有效率的解決方案。它利用 std::remove_if() 函數來識別並消除滿足指定條件的元素。下面的程式碼示範了這個方法:

allPlayers.erase(
    std::remove_if(
        allPlayers.begin(),
        allPlayers.end(),
        [](Player const &amp; p) { return p.getpMoney() <= 0; } // Lambda function to identify players with negative money
    ),
    allPlayers.end()
);
登入後複製

結論

透過解決無效迭代器的可能性,在必要時實現賦值運算符,並利用高效的演算法,開發人員可以安全地從C 迴圈內的向量中刪除元素。

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

來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
作者最新文章
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板