首頁 >後端開發 >C++ >如何在迭代時安全地從 `std::list` 中刪除元素?

如何在迭代時安全地從 `std::list` 中刪除元素?

Linda Hamilton
Linda Hamilton原創
2024-12-20 13:01:21463瀏覽

How to Safely Remove Elements from an `std::list` While Iterating?

你可以在迭代 std::list 的同時刪除其中的元素嗎?

在 C 中,內建的 std::list 類別是雙向鍊錶,提供高效率的元素插入和刪除。然而,當嘗試在迭代期間修改清單時,謹慎執行操作至關重要。

問題:迭代檢查 std: 中項目的活動狀態時發生錯誤:列出並嘗試立即刪除不活動的項目。刪除元素後嘗試移動迭代器時遇到錯誤「清單迭代器不可遞增」。

解決方案:在迭代過程中成功刪除元素的關鍵是將修改應用於迭代器首先,在執行刪除之前。與其嘗試遞增迭代器然後刪除元素,不如將循環重構為 while 循環,從而允許迭代器在循環本身內遞增。因此,下面更新的程式碼示範了正確的方法:

std::list<item*>::iterator i = items.begin();
while (i != items.end()) {
    bool isActive = (*i)->update();
    if (!isActive) {
        i = items.erase(i);  // alternatively, i = items.erase(i++);
    } else {
        other_code_involving(*i);
        ++i;
    }
}

此修改後的程式碼可確保迭代器在執行元素刪除之前正確遞增,從而避免錯誤並在迭代時有效刪除不活動元素列表。

以上是如何在迭代時安全地從 `std::list` 中刪除元素?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn