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

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

Barbara Streisand
發布: 2024-12-04 04:09:13
原創
182 人瀏覽過

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

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

迭代向量時,可能存在需要根據以下條件刪除元素的情況:某些標準。但是,嘗試在迭代時修改向量可能會導致運行時錯誤。

考慮以下場景:

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中文網其他相關文章!

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