在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 // I need to remove this object from 'inv'... }
我們可以刪除基於範圍的循環中的元素嗎?
不可以,您無法在基於範圍的 for 迴圈內從向量中刪除元素。這是因為循環透過建立向量迭代器的副本進行操作,如果刪除或新增元素,該副本就會失效。
因此,考慮在迭代期間修改容器的替代方法至關重要。
建議的解決方案
建議的方法是使用傳統的 for 循環或其變體之一。這允許您直接操作向量並根據需要刪除元素。例如:
auto i = std::begin(inv); while (i != std::end(inv)) { // Do some stuff if (blah) i = inv.erase(i); else ++i; }
以上是我們可以從 C 11 基於範圍的 For 迴圈內的向量中刪除元素嗎?的詳細內容。更多資訊請關注PHP中文網其他相關文章!