deque雙端佇列容器

2022-08-30 15:24:19 字數 3031 閱讀 6759

deque採用分塊的星星儲存結構來儲存資料,每塊的大小一般為512個位元組,稱為乙個deque塊,所有的deque塊使用乙個map塊進行管理,每個map資料項紀錄各塊的首位址。

deque塊在頭部和尾部都可以插入和刪除元素,而不需要移動其他元素(使用push_back()方法在尾部插入元素,會擴張佇列;而使用push_back()方法在手部插入元素和使用insert()方法在中間插入元素)。

一般來說,當考慮到容器元素的記憶體分配策略和操作的效能時,deque相對於vector更具有優勢。

使用deuqe需要宣告標頭檔案包含「#include」。

建立deque物件的方法通常有三種,建立物件的時候可以選擇不帶引數,帶乙個引數,兩個引數。

(1)建立沒有任何元素的deque物件

dequed;

dequedd;

(2)建立具有n個元素的deque物件

dequed(10);   //建立具有10個整形元素的deque物件d

(3)建立具有n個元素的deque物件,並賦初值

dequed(10,2.5);   //建立1具有10個初值為2.5的float型的deque物件d

(1)使用push_back()方法從尾部插入元素,會不斷擴張佇列。

#include#includeusing namespace std;

int main()

{ dequed;

d.push_back(1);

d.push_back(2);

d.push_back(3);

cout<(2)使用push_front()方法從頭部插入元素,其他元素向後移動

#include#includeusing namespace std;

int main()

{ dequed;

d.push_back(1);

d.push_back(2);

d.push_front(3);

cout<(3)使用insert()方法從中間插入元素,其引數有兩個,第乙個是迭代器引數,第二個是插入元素的值

#include#includeusing namespace std;

int main()

{ dequed;

d.push_back(1);

d.push_back(2);

d.push_back(3);

d.insert(d.begin()+1,10);

cout<

(1)以陣列方式遍歷

#include#includeusing namespace std;

int main()

{ dequed;

d.push_back(1);

d.push_back(2);

d.push_back(3);

for(int i=0;i<3;i++)cout<

(2)以前向迭代器的方式遍歷

#include#includeusing namespace std;

int main()

{ dequed;

d.push_back(1);

d.push_back(2);

d.push_back(3);

deque::iterator it;

for(it=d.begin();it

採用反向迭代器對雙端佇列容器進行反向遍歷

#include#includeusing namespace std;

int main()

{ dequed;

d.push_back(1);

d.push_back(2);

d.push_back(3);

deque::reverse_iterator rit;

for(rit=d.rbegin();rit

可以從deque中的首部、尾部、中部刪除元素,並可以清空雙端佇列容器。

(1)採用pop_front()方法從頭部刪除元素

#include#includeusing namespace std;

int main()

{ dequed;

for(int i=1;i<10;i++)

d.push_back(i);

d.pop_front();

d.pop_front();

deque::iterator it;

for(it=d.begin();it

輸出 3 4 5 6 7 8 9

(2)採用pop_back()方法從尾部刪除元素

#include#includeusing namespace std;

int main()

{ dequed;

for(int i=1;i<10;i++)

d.push_back(i);

d.pop_back();

d.pop_back();

deque::iterator it;

for(it=d.begin();it

輸出:1 2 3 4 5 6 7    

(3)使用erase()方法從中間刪除元素,其引數是迭代器位置。

#include#includeusing namespace std;

int main()

{ dequed;

for(int i=1;i<10;i++)

d.push_back(i);

d.erase(d.begin()+2);

d.erase(d.begin()+5);

deque::iterator it;

for(it=d.begin();it

輸出:1 2 4 5 6 8 9

(4)使用clear()方法清空deque物件

#include#includeusing namespace std;

int main()

{ dequed;

for(int i=1;i<10;i++)

d.push_back(i);

d.clear();

cout<

Deque雙端佇列容器

1 deque雙端佇列容器建立deque物件 可建立無任何元素的或者具有n個元素的或者具有n個元素的並賦初值的 include include include include include include include include include include include includ...

deque雙端佇列容器

c 中的stl還是比較有用的,尤其是在做科研實現演算法的時候,之前也有用過,但是沒怎麼系統地學過,因此最近找了本書,大致瀏覽了一下,葉志軍的那本 c stl開發技術導引 科普 入門性質的一本書,寫得比較淺 呵呵,勿噴 下面的內容大部分是摘自該書。deque雙端佇列容器 double ended qu...

關於deque容器 雙端佇列

如果不是vector每次配置新的空間時都留有餘裕,其成長假象所帶來的代價是非常昂貴的。deqt 預設構造形式 deque begin,end 建構函式將 beg,end 區間中的元素拷貝給本身。deque n,elem 建構函式將n個elem拷貝給本身。deque const deque deq 拷...