在 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中文網其他相關文章!