C 學習筆記12 STL Deque

2021-08-07 22:44:02 字數 885 閱讀 5097

deque雙端佇列其實就是乙個雙端陣列

deque是雙端佇列,它有vector沒有的功能,push_front,在序列頭部新增元素,它的底層設計也不同於vector,deque的底層是用間接索引的方式實現的,如下圖所示:

開始的時候map是乙個指標陣列,裡面儲存著若干個指標,但初始的時候只有其中的乙個指標有對應的值,比如是中間的乙個指標,它指向記憶體中的堆中申請的一片連續的記憶體,這塊記憶體大小一般是固定的(可能為512位元組),此時有迭代器指標的頭和尾指向當前位置。

當向deque中新增資料的時候,先看是那種新增方式,如果是push_back,那麼就在這個連續的記憶體塊當中新增物件資料;

如果是push_front,此時因為前面沒有記憶體,所以此時就要申請一塊新的連續的記憶體,並用map中已知指標前面的位置的那個指標指向這片記憶體,並在這塊記憶體最後的一定大小的位元組中儲存資料,並修改迭代器的begin,如果是push_back,那麼就直接在迭代器的end處新增元素,然後迭代器的end+1。

那麼當刪除元素的時候怎麼辦呢?當在首部或者尾部刪除元素,此時很好辦,直接讓迭代器的頭向前移動或者尾向後移動一下就可以了,此時效率很高,並且此時的修改並不會影響deque原有的迭代器,即在此之前的迭代器不會失效

但如果在中間某個地方刪除或者新增元素的時候可能就要考慮怎麼移動的問題了,此時要判斷要插入或者刪除的位置離哪邊近一些,然後就對近的那一段進行移動。

所以對於deque來說,中間刪除或者新增元素也是代價很高的,但在開頭和尾部刪除和新增元素代價很少,另外由於deque是間接取元素,所以它的隨機訪問(operator)的效率要比vector低一些。

C 學習筆記12

全稱為standard template library,由以下六個部分組成 容器 container,儲存資料 迭代器 iterator,訪問容器中的元素 介面卡 adapter,基礎資料結構 新的資料結構 演算法 algorithm,對容器元素進行操作 函式物件 functor,對元素進行定製化...

c 學習筆記12

概念 過載函式呼叫操作符的類,其物件稱為函式物件 函式物件使用過載的 時,行為類似函式呼叫,也叫仿函式 本質 函式物件 仿函式 是乙個類,不是乙個函式 特點 函式物件在使用時,可以像普通函式那樣呼叫,可以有引數,可以有返回值 函式物件超出普通函式的概念,函式物件可以有自己的狀態 函式物件可以作為引數...

C語言學習筆記12

回顧 1.位置指標 作業 1.id判斷 2.根據id顯示人員資訊 預處理指令是c語言支援的一種特殊指令 它們以 做開頭,不以 做結尾 預處理指令在編譯的第乙個階段被處理 所有預處理指令都是把程式變成另外的樣子 gcc可以使用 e選項單獨處理所有預處理指令 define是乙個預處理指令 這個預處理指令...