deque 添加刪除元素 迭代器失效問題

deque 添加刪除元素 迭代器失效問題

image
deque的儲存空間主體在緩衝區buffer中,由一段一段的定量連續空間組成。爲了便於迭代器的尋址,除了此儲存空間,deque採用一個表(map)來記錄每個連續空間的首地址。map是一小塊連續的空間,每個元素(node)都是指針,指向buffer中的各首地址。
指向deque中某元素的迭代器iterator實際結構如圖所示,first和last分別指向buffer中本段連續空間的首尾元素,cur指向iterator解引用得到的元素,node指向map中對應的node。
==需要注意的是,deque要求map前後要各預留一個node節點,以便擴充可用。==

插入元素

  • 頭尾
    可能使指向其他元素的迭代器失效(buffer中一段連續空間滿,需重新分配內存和map時),但指針、引用仍有效
  • 其他位置
    迭代器、指針、引用失效

刪除元素

  • 頭尾
    指向其他元素的迭代器、指針、引用仍然有效
  • 其他位置
    迭代器、指針、引用失效

在deque中push_back插入元素的例子

image
對deque push_back(23),buffer需添加一段新的連續內存空間,因此map的node節點不夠用,map被釋放,對map重新分配存儲空間爲new_map。所有iterator的node指向原map,因此iterator均失效。但buffer的原有空間並未發生改變,因此其他元素的引用、指針仍然有效。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章