首頁 > 後端開發 > C++ > 如何在保留迭代器有效性的同時安全地從 C 映射中刪除元素?

如何在保留迭代器有效性的同時安全地從 C 映射中刪除元素?

Barbara Streisand
發布: 2024-12-10 11:54:10
原創
224 人瀏覽過

How Can I Safely Remove Elements from a C   Map While Preserving Iterator Validity?

從映射中迭代刪除:保留迭代器

在映射迭代中,刪除元素可能是一個棘手的操作,因為它可能會使迭代器無效。為了防止這種情況,程式設計師經常尋求保留迭代器有效性的解決方案。

此問題的標準解決方案是關聯容器擦除習慣用法:

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 循環( RBFL),因為容器正在被修改。在普通的 for 迴圈中,迭代器明確遞增,從而提供對迭代過程的控制。 RBFL 會自動迭代元素,隱藏迭代機制,並可能導致未定義的行為。

對於 C 11 之前的實現,語法略有不同:

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

這裡, const迭代器不能被刪除。因此,必須使用適應擦除的專用迭代器。

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

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