在C 11 基於範圍的循環期間從向量中刪除元素
C 11 中基於範圍的for 循環提供了一種便捷的迭代方式容器的元素,特別是當您需要對每個元素執行操作時。但是,在處理向量時,有時可能需要在迭代向量時從向量中刪除元素。
問題
考慮以下程式碼:
std::vector<IInventory*> inv; inv.push_back(new Foo()); inv.push_back(new Bar()); for (IInventory* index : inv) { // Do some stuff // ... }
在循環內,您意識到需要從向量 inv 中刪除特定元素。但是,您遇到兩個問題:
解
基於🎜>解
基於範圍的for 循環適用於僅需要存取容器的每個元素一次的情況。如果需要在迭代期間修改或刪除元素,則應使用傳統的 for 迴圈或其基於迭代器的變體之一。for (auto i = inv.begin(); i != inv.end(); /*++i*/) { // Do stuff if (should_remove) { i = inv.erase(i); } else { ++i; } }
以下是如何使用具有迭代器增量管理的傳統for 循環修改程式碼:
透過明確管理迭代器增量,您可以維護循環的有效性,並確保您可以刪除和修改元素而不會遇到任何錯誤。以上是在 C 11 中迭代時如何安全地從向量中刪除元素?的詳細內容。更多資訊請關注PHP中文網其他相關文章!