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

在 C 中迭代時如何安全地從向量中刪除元素?

Linda Hamilton
發布: 2024-12-06 07:19:11
原創
315 人瀏覽過

How to Safely Remove Elements from a Vector While Iterating in C  ?

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

使用for 循環迭代向量時,常見的任務是刪除基於循環的元素根據具體標準。但是,嘗試刪除循環本身內的元素可能會導致錯誤。

考慮以下程式碼:

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物件必須是可分配的,需要為Player類別實作operator=。

解決方案

要解決此問題,避免在 for 迴圈中遞增它:

for (vector<Player>::iterator it = allPlayers.begin(); it != allPlayers.end(); /*it++*/)
{
    if(it->getpMoney() <= 0) 
        it = allPlayers.erase(it);
}
登入後複製

為 Player 類別實作 operator=以便能夠在

使用演算法的替代方法

為了簡化程式碼,請考慮使用擦除刪除慣用法:

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

此程式碼採用std::remove_if() 演算法過濾掉負數或零錢的玩家,然後使用擦除()將其從向量。

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

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