我目前正在尋找提供一些插入(插入或push_back)和一些刪除(擦除,pop_back是不夠的)方法的容器,並且這不會使迭代器或指針無效調用這兩種方法。更清楚地說,我想要一組元素,我可以添加一個元素(我不關心在哪裏),以及在哪裏可以刪除任何元素(所以我在意在哪裏)。另外,我會有指向特定元素的外部指針,並且如果我從集合中添加或刪除元素,我希望它們保持有效。容器,不會使迭代器(和指針)無效
據我所知,有兩個標準容器可以滿足我的需求:set
和list
。但是,一般來說,我不喜歡使用這樣的容器來滿足這樣簡單的需求。由於list
在內部涉及指針,並不提供隨機訪問其元素,我認爲這不是一個好的選擇。 A set
對其元素具有隨機訪問權限,但也涉及指針,並且隨機訪問本身不是在恆定時間內完成的。我認爲set
會比list
更好的解決方案,但我想過其他的東西。
那麼當一個元素被刪除時,一個簡單的向量不會試圖保持元素是連續的呢?當移除該容器中間的元素時,其位置將是空的,並且不會發生其他情況。這樣,沒有迭代器或指針會失效。此外,添加元素時,容器將搜索空位置,如果沒有這樣的空洞,則使用簡單的push_back
。
很明顯,因爲push_back
可以使vector
無效迭代器,所以我會使用deque
作爲實現的基礎。我也會使用某種堆棧來跟蹤刪除元素的洞。通過這種方式,除了滿足我的無效化需求外,還可以在一段時間內添加,刪除和訪問元素。
但是,仍然存在一個問題:在遍歷這個容器或僅僅通過索引訪問元素時,我們需要考慮這些漏洞。這就是問題開始超越優勢的地方。
因此,我的問題是:你怎麼看待我對這個容器的想法? 更重要的是,你會用我的原始問題,set
,list
還是其他什麼? 另外,如果你對最後一個問題有很好的解決方案(遍歷我的容器),請隨時向我展示。
_「在拆除這個容器中間的元素,它的位置是空的,並沒有什麼人會發生的。」 _定義_empty_請。 – 2015-02-08 09:29:59
使用迭代刪除的東西 - 肯定有迭代器變爲無效 – 2015-02-08 09:30:54
所以,你要像[升壓'stable_vector'(http://www.boost.org/doc/libs/1_57_0/doc/html/boost/container /stable_vector.html)? – 2015-02-08 09:32:14