如何在 C 迭代過程中安全地從向量中刪除元素?
Dec 04, 2024 am 04:09 AM從循環內的向量中刪除元素
迭代向量時,可能存在需要根據以下條件刪除元素的情況:某些標準。但是,嘗試在迭代時修改向量可能會導致運行時錯誤。
考慮以下場景:
for (vector<Player>::iterator it = allPlayers.begin(); it != allPlayers.end(); it++) { if (it->getpMoney() <= 0) it = allPlayers.erase(it); else ++it; }
登入後複製
此程式碼旨在刪除零錢或負錢的玩家。但是,它會失敗並出現與賦值運算子相關的錯誤。若要解決此問題,請避免在循環內遞增迭代器。相反,依賴erase()函數傳回的迭代器。
for (vector<Player>::iterator it = allPlayers.begin(); it != allPlayers.end(); /*it++*/) { if (it->getpMoney() <= 0) it = allPlayers.erase(it); else ++it; }
登入後複製
此外,erase()函數使用operator=要求Player類別是可指派的,這表示Player類別必須實作賦值運算子。
向量的擦除-刪除習語操作
為了簡化從向量中刪除元素的任務,請採用擦除刪除慣用法:
allPlayers.erase( std::remove_if( allPlayers.begin(), allPlayers.end(), [](Player const &amp; p) { return p.getpMoney() <= 0; } ), allPlayers.end() );
登入後複製
此慣用法結合了remove_if()演算法來辨識要刪除的元素。擦除和擦除()方法刪除所需的範圍。
以上是如何在 C 迭代過程中安全地從向量中刪除元素?的詳細內容。更多資訊請關注PHP中文網其他相關文章!
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn

熱門文章
擊敗分裂小說需要多長時間?
3 週前
By DDD
倉庫:如何復興隊友
3 週前
By 尊渡假赌尊渡假赌尊渡假赌
Hello Kitty Island冒險:如何獲得巨型種子
3 週前
By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O.能量晶體解釋及其做什麼(黃色晶體)
1 週前
By 尊渡假赌尊渡假赌尊渡假赌
公眾號網頁更新緩存難題:如何避免版本更新後舊緩存影響用戶體驗?
3 週前
By 王林

熱門文章
擊敗分裂小說需要多長時間?
3 週前
By DDD
倉庫:如何復興隊友
3 週前
By 尊渡假赌尊渡假赌尊渡假赌
Hello Kitty Island冒險:如何獲得巨型種子
3 週前
By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O.能量晶體解釋及其做什麼(黃色晶體)
1 週前
By 尊渡假赌尊渡假赌尊渡假赌
公眾號網頁更新緩存難題:如何避免版本更新後舊緩存影響用戶體驗?
3 週前
By 王林

熱門文章標籤

記事本++7.3.1
好用且免費的程式碼編輯器

SublimeText3漢化版
中文版,非常好用

禪工作室 13.0.1
強大的PHP整合開發環境

Dreamweaver CS6
視覺化網頁開發工具

SublimeText3 Mac版
神級程式碼編輯軟體(SublimeText3)