首頁 > 後端開發 > C++ > 如何在迭代過程中安全地從 C 映射中刪除項目?

如何在迭代過程中安全地從 C 映射中刪除項目?

Mary-Kate Olsen
發布: 2024-12-11 00:38:09
原創
404 人瀏覽過

How to Safely Remove Items from a C   Map During Iteration?

在C 迭代期間從映射中刪除項目

當迭代映射並嘗試根據特定條件刪除項目時,它是重要的是要考慮擦除元素對迭代器的影響。在迭代映射時擦除元素將使迭代器無效,從而難以繼續迭代過程。

關聯容器的標準擦除習慣用法

關聯容器的標準習慣用法迭代時從關聯容器(例如地圖)中刪除如下如下:

for (auto it = m.cbegin(); it != m.cend() /* not hoisted */; /* no increment */)
{
  if (must_delete)
  {
    m.erase(it++);    // or "it = m.erase(it)" since C++11
  }
  else
  {
    ++it;
  }
}
登入後複製

解釋

  • 取消循環條件:這確保循環檢查映射的末尾每次通過。
  • 在移除過程中不增加迭代器case: 當刪除一個元素時,迭代器指向映射中的下一個元素。這意味著循環不應在擦除後遞增迭代器。
  • 常數迭代器: 在 C 11 之前的版本中,無法擦除常數迭代器。在這種情況下,應該使用傳統的迭代器(例如 std::map::iterator)。

遵循這個習慣用法,您可以安全地從地圖中刪除項目,同時迭代而不使迭代器無效。

以上是如何在迭代過程中安全地從 C 映射中刪除項目?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

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