deque函數:
deque容器爲一個給定類型的元素進行線性處理,像向量一樣,它能夠快速地隨機訪問任一個元素,並且能夠高效地插入和刪除容器的尾部元素。但它又與vector不同,deque支持高效插入和刪除容器的頭部元素,因此也叫做雙端隊列。
deque的特點:
- 支持隨機訪問,即支持[]以及at(),但是性能沒有vector好
- 可以在內部進行插入和刪除操作,但性能不及list。
deque和vector的不同之處:
- deque兩端都能夠快速的插入和刪除元素。vector只能在尾端進行。
- deque的元素存取和迭代器操作會稍微慢一些。因爲deque的內部結構會多一個簡介過程。
- 迭代器是特殊的智能指針,而不是一般指針。它需要在不同的區塊之間跳轉。
- deque可以包含更多的元素,其max_size可能更大。因爲不止使用一塊內存。
- 不支持對容量和內存分配時機的控制。
容器的選擇:
- 強調快速隨機訪問,則vector比list好得多。
- 已知要存儲元素的個數。vector好於list。
- 強調增刪且不要在兩端插入修改元素,則list顯然要比vector好。
- 除非我們需要在容器首部插入和刪除元素,deque好於vector。
插入操作:
deque<string> dec;
(1)void push_front(const T& x): 雙端隊列頭部增加一個元素X
dec.push_front("world"); //頭部插入
(2)void push_back(const T& x):雙端隊列尾部增加一個元素x
dec.push_back("hello"); //尾部插入
(3)iterator insert(iterator it,const T& x):雙端隊列中某一元素前增加一個元素x
dec.insert(dec.end(), "aaaaaa");
(4)void insert(iterator it,int n,const T& x):雙端隊列中某一元素前增加n個相同的元素x
dec.insert(dec.end(), 5, "bbb");
(5)void insert(iterator it,const_iterator first,const_iteratorlast):雙端隊列中某一元素前插入另一個相同類型向量的[forst,last)間的數據
deque<string> t_dec(2,"ccc");
dec.insert(dec.end(), t_dec.begin(), t_dec.end());
刪除操作:
(1)iterator erase(iterator it):刪除雙端隊列中的某一個元素
dec.erase(dec.begin());
(2)iterator erase(iterator first,iterator last):刪除雙端隊列中[first,last)中的元素
dec.erase(dec.end()-3, dec.end());
(3)void pop_front():刪除雙端隊列中最前一個元素
dec.pop_front(); //頭部刪除
(4)void pop_back():刪除雙端隊列中最後一個元素
dec.pop_back(); //尾部刪除
(5)void clear():清空雙端隊列
dec.clear(); //清空
刪除指定元素:
//刪除指定元素
deque<string>::iterator iter;
for(iter = dec.begin(); iter != dec.end(); iter++){
if(*iter == "aaa") {
iter = dec.erase(iter);
}
}
遍歷函數:
(1)reference at(int pos):返回pos位置元素的引用
deque<string> dec;
dec.push_back("aaaa");
dec.push_back("bbbb");
string s=dec.at(0);
cout<<s<<endl; //"aaaa"
(2)reference front():返回首元素的引用
string s=dec.front(); //返回第一個元素
(3)reference back():返回尾元素的引用
string s=dec.back(); //返回最後一個元素
(4)iterator begin():返回向量頭指針,指向第一個元素
(5)iterator end():返回指向向量中最後一個元素下一個元素的指針(不包含在向量中)
(6)reverse_iterator rbegin():反向迭代器,指向最後一個元素
(7)reverse_iterator rend():反向迭代器,指向第一個元素的前一個元素
//反序輸出
deque<string>::reverse_iterator rit;
for(rit = dec.rbegin(); rit != dec.rend(); ++rit)
{
cout<<*rit<<endl;
}
判斷函數
(1)bool empty() const:向量是否爲空,若true,則向量中無元素
大小函數
(1)int size() const:返回向量中元素的個數
(2)int max_size() const:返回最大可允許的雙端對了元素數量值
(3)resize()函數:調整容器大小
//調整容器大小,不足以參數2補充
dec.resize(5);
dec.resize(5,"hello");
其他函數
(1)void swap(deque&):交換兩個同類型向量的數據
deque<string> s_dec;
swap(s_dec, dec); //交換容器內容
s_dec.swap(dec); //交換容器內容
(2)void assign(int n,const T& x):向量中第n個元素的值設置爲x