我打算實施C++中的東西列表,其中的元素可能會被無序刪除。我不指望我需要任何形式的隨機訪問(我只需要定期掃描列表),而且項目的順序也不重要。C++迭代器的生命週期和有效性是什麼?
所以我想到std::list<Thing*> with this->position = insert(lst.end(), thing)
應該做的伎倆。我希望Thing班級記住每個實例的位置,以便我可以在以後輕鬆地在一段時間內輕鬆完成lst.erase(this->position)
。但是,我仍然對C++ STL容器有點新鮮,而且我不知道如此長時間保持迭代器是否安全。尤其是,鑑於在插入Thing之前和之後將會刪除其他元素。
好的答案,這也有助於瞭解可能導致向量重新分配的原因。 (插入一個元素是顯而易見的,但是還有其他嗎?) – Malabarba 2011-10-25 21:57:19
允許對矢量(包括插入和移除)的任何修改來重新分配和使迭代器失效;無論是否這樣做都是實現定義的。所以最好假定以任何方式修改矢量總是使所有現有的迭代器無效。 – Miral 2012-02-02 07:32:43