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 拷...