deque與vector非常相似,不僅可在尾部插入和刪除,還可在頭部插入和刪除,但是內部的資料機制和執行效能與vector不同,一般來說,當考慮到容器元素的記憶體分配策略和操作的效能時,deque比vector有優勢。
技術原理
deque的元素資料採用分塊的線性結構進行儲存,如下圖所示。deque分成若干線性儲存塊,稱為deque塊,所以的deque塊使用乙個map塊進行管理,每個map資料項記錄各個deque塊的首位址。map是deque的中心部件,將先於deque塊,依照deque的個數計算deque的塊數,作為map塊的資料項數,建立出map塊。
在map塊和deque塊的結構下,deque使用了兩個迭代器m_start和m_finish,對首個deque塊和末個deque進行訪問。
m_start用於push_front函式,m_finish用於push_back函式,所以能在隊首和隊尾高效的新增元素。
deque應用基礎
deque物件的建立、初始化賦值、元素的遍歷訪問、反向遍歷與vector相同,只是把vector換成deque,這裡就不多加贅述了。
2.1元素的插入
由於deque使用了兩個迭代器分別指向雙端佇列的首尾,因此,deque具有高效的頭部插入元素的函式push_back()。其他位置的插入,將涉及相關元素的移位拷貝,例如insert函式。直接上簡單明瞭的**:
int main(int argc, char *argv)
執行結果:
2.4deque其他常用函式
簡單粗暴的上**:
int main(int argc, char *argv)
cout << endl;
cout << "deque首元素為:" << d1.front() << endl;
cout << "deque末元素為:" << d1.back() << endl;
cout << "deque元素個數為:"<< d1.size() << endl;
cout << "deque最大元素個數為:"<< d1.max_size() << endl;
return a.exec();}
執行結果:
3. 小結
deque雙端佇列容器採用分塊的線性結構來儲存資料,兩個迭代器分別指向容器的首尾元素,具有高效的刪除首尾元素的push_front和pop_front函式。由於deque容器是以deque塊為單位進行記憶體分配,並使用了二級的map進行管理,因此不易於實現類似於vector的capacity和reverse函式,而且deque容器也不需要這樣的獲取和調整容器大小的函式。
C STL 雙端佇列deque詳解
一.解釋 deque 雙端佇列 是一種具有佇列和棧的性質的資料結構。雙端佇列的元素可以從兩端彈出,其限定插入和刪除操作在表的兩端進行。二.常用操作 1.標頭檔案 include 2.定義 a deques1 b deque s2 c deque s3 node為結構體,可自行定義。3.常用操作 a ...
C STL標準庫 雙端佇列deque
其實deque的最大特點就是雙端,其可以實現隊首隊尾都插入的功能 vector 只能插入在隊首,但是提供下標訪問方式。stack 不支援下標訪問,存入只能存進棧頂,取出最後乙個必須乙個乙個pop。queue 只能插入進隊首,不支援下標 array 類似陣列 幾乎就是 支援下標,可在任何地方插入 de...
C STl之雙端佇列
deque與vector非常相似,不僅可以在尾部插入和刪除元素,還可以在頭部插入和刪除。不過當考慮到容器元素的記憶體分配策略和操作效能時,deque相對vector較為有優勢。標頭檔案 include 1 deque 建立乙個沒有任何元素的deque物件。deque d 2 deque size t...