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

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

Patricia Arquette
發布: 2024-12-12 15:20:11
原創
641 人瀏覽過

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

在迭代期間從映射中刪除元素

迭代映射時,常見的方法是使用基於範圍的 for 循環。但是,在迭代時修改映射可能會導致意外行為,因為迭代器將變得無效。

在迭代時從映射中刪除元素的建議技術稱為「關聯容器擦除習慣用法」:

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;
  }
}
登入後複製

這個習慣用法確保使用前綴增量刪除元素後迭代器仍然有效

請注意,在這種情況下,使用傳統的for 循環而不是基於範圍的for 循環非常重要,因為修改容器將使基於範圍的循環的迭代器無效。

在C 11 之前,在迭代映射時需要使用單獨的迭代器類型來刪除元素:

for (std::map<K, V>::iterator it = m.begin(); it != m.end(); ) { /* ... */ }
登入後複製

在這兩個版本中在這種情況下,刪除元素不會違反元素的常數性,因為C 中的常數性不會影響物件的生命週期。

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

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