2015-07-03 47 views
-2

假設我有一個std容器,其中包含總共100個元素。 我再從container.My問題取出50元如下下列情況下的迭代器何時失效

1-If the container is a `std::vector` what iterators will become invalidated. 
2-If the container is a `std::list` what iterators will become invalidated. 
3-If the container is a `std::deque` what iterators will become invalidated. 
4-If the container is a `std::map` what iterators will become invalidated. 

下面是根據我的理解,請糾正我,如果我錯了

1 - 如果50元素被刪除的答案在一個向量中,所有的下一個元素將向上移動一個向量,因爲向量是一個動態數組,並且是連續的。因此,在第50個索引之前的迭代器將是有效的,並且大於或等於50的迭代器將在刪除之後失效

2-如果容器是列表(雙鏈表)並且第50個索引僅在迭代器之後被移除到第50指數將受到影響。

3,如果容器是一個deque我不知道該迭代器將得到無效

4 - 如果容器是一個地圖,我相信所有的迭代器將得到無效。

(0-100),因爲需要重新排序/排序。如果我錯了,請糾正我。

回答

3

1-如果在矢量中刪除第50個元素,則所有下一個元素將向上移動一個向量,因爲矢量是動態數組及其連續的。因此,在第50個索引之前的迭代器將是有效的,並且大於或等於50的迭代器將在刪除之後失效。

正確。 (Source

2-如果該容器是一個列表(雙鏈接列表)和第50索引移除僅迭代或等於第50個索引會受到影響之後。

錯誤。只有50索引指向迭代器失效(列表中的節點重新鏈接,而不是移動)(Source

3,如果容器是一個deque我不知道該迭代器將得到無效

「除非擦除元素位於容器的末端或開始處,否則所有迭代器和引用都將失效,在這種情況下,只有迭代器和對擦除元素的引用纔會失效。「(Source

4 - 如果容器是一個地圖,我相信所有的迭代器會得到無效的。

不正確的。同樣的解釋爲std::list適用(std::map是鏈接樹)。 (Source

+0

感謝您清理那個 – MistyD

相關問題