首頁 > 後端開發 > C++ > 如何在迭代時從向量中刪除元素而不使迭代器無效?

如何在迭代時從向量中刪除元素而不使迭代器無效?

Barbara Streisand
發布: 2024-10-31 01:23:29
原創
354 人瀏覽過

How to Remove Elements from a Vector while Iterating Without Invalidating Iterators?

迭代時從向量中刪除元素

當迭代std::vector 並根據特定條件刪除元素時,使用可能會出現多個向量或無效的迭代器。這可以透過利用更合適的資料結構或採用替代方法來解決。

替代資料結構

不要使用多個向量,而是考慮使用替代資料結構,例如as:

  • std::set: 維護自動排序的唯一元素的集合。此屬性有利於以特定順序存取元素,同時避免重複。
  • std::list: 雙向鍊錶允許高效率的插入和刪除操作。迭代器在元素移除後仍然有效,適合元素序列頻繁變化的場景。

修改方法

如果使用不同的資料結構不可行,std::vector 中有解決方法:

  1. 使用基於迭代器的方法: 使用循環迭代向量並在迭代器上呼叫擦除()指向要刪除的元素。如果要刪除的元素數量相對較小,此方法可能會非常有效。
  2. 使用基於向量的方法: 迭代向量兩次。在第一次迭代中,識別要刪除的元素並將其索引儲存在單獨的向量中。在第二次迭代中,使用索引來擦除元素。如果需要刪除大量元素,此方法可能會非常有效。

透過實作這些替代方法,可以在高效迭代且不使迭代器無效的情況下從 std::vector 中刪除元素。

以上是如何在迭代時從向量中刪除元素而不使迭代器無效?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

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