[英]What is the lifetime and validity of C++ iterators?
我打算在C ++中實現一個Things列表,其中的元素可能會被無序刪除。 我不希望我需要任何類型的隨機訪問(我只需要定期掃描列表),項目的順序也不重要。
所以我想到std::list<Thing*> with this->position = insert(lst.end(), thing)
應該做的伎倆。 我希望Thing類能夠記住每個實例的位置,這樣我以后就可以在恆定時間內輕松地執行lst.erase(this->position)
。
但是,我對C ++ STL容器仍然有點新意,我不知道將迭代器保持這么長時間是否安全。 特別是,考慮到在插入Thing之前和之后將刪除其他元素。
在列表中,所有迭代器在插入期間保持有效,並且只有擦除元素的迭代器在擦除期間無效。
在你的情況下,即使在插入Thing *之前和之后刪除了其他元素,保持迭代器也應該沒問題。
編輯 :
vector和deque的其他細節:
矢量 :
deque :
這取決於您使用的容器。
檢查: http : //www.sgi.com/tech/stl/
查看最后的每個容器文檔,它們將是對迭代器保持有效的條件的描述。
對於std :: list <>,它們在所有條件下都保持有效,直到它們實際引用的元素從容器中刪除(此時它們無效)。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.