在基於範圍的for 循環中管理向量元素
在C 11 中,基於範圍的for 循環提供了一種方便的方法來迭代容器的元素。但是,某些操作(例如從向量中刪除元素)在這些循環中會出現問題。
在 C 11 基於範圍的 for 迴圈期間可以從向量中刪除元素嗎?
不幸的是,沒有。基於範圍的 for 迴圈設計用於容器中每個元素的一次性迭代。它們不適合修改容器本身,包括刪除元素。
元素刪除的替代方法:
要從迴圈內的向量中刪除元素,必須使用傳統的 for 迴圈或其變體。這些允許對容器進行修改和非線性遍歷。
範例:
auto i = std::begin(inv); while (i != std::end(inv)) { // Do some stuff if (blah) i = inv.erase(i); else ++i; }
透過使用 std::begin 和 std::end 函數,循環使用迭代器迭代向量。當一個元素被標記為刪除時,將呼叫擦除函數,這將使指向已刪除元素的迭代器無效。然後循環繼續推進迭代器。
總之,雖然基於範圍的 for 迴圈為唯讀迭代提供了易用性,但對於從向量中刪除元素等操作,您需要使用傳統的 for 迴圈來保持對容器修改的控制。
以上是您可以在 C 11 基於範圍的 For 迴圈期間從向量中刪除元素嗎?的詳細內容。更多資訊請關注PHP中文網其他相關文章!