簡體   English   中英

C ++迭代器的生命周期和有效性是什么?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM