deque簡介
deque屬於序列式容器,和vector十分相似,采用dynamic array來管理元素,提供隨機訪問,但是deque的dynamic array頭尾兩端都開放,可以在頭尾兩端快速安插和刪除。
為了提供這種能力,deque通常實現為一組獨立區塊,第一區塊朝某方向發展,最末區塊朝另一方向發展。
使用條件:
包含頭文件
#include<deque>
deque類型定義於命名空間std內的一個class template
namespace std { template <typename T, typename Allocator = allocator<T> >
class deque; }
這里的第一個template參數用來表明元素類型,第二個template實參可有可無,用來指定內存模型,默認為allocator。
deque的能力
1.能夠在兩端快速安插和移除元素,這些操作可以在攤提的常量時間內完成,但在中段安插和移除元素的速度相對較慢。
2.訪問元素時deque內部結構會多一個間接過程,所以元素的訪問和迭代器的動作會稍稍慢一些呢。
3.在PC這樣的內存區塊有大小限制的系統中,deque使用不止一塊內存,所以可以內含更多元素,因此deque的max_size()可能更大哦。
4.deque的迭代器是隨機訪問迭代器。
deque操作函數
1.構造函數和析構函數
deque<elem> c //default構造函數,產生一個空的deque
deque<elem> c(c2) //copy構造函數,建立c2的同型deque並成為c2的一份拷貝
deque<elem> c(n) //利用default構造函數生成一個大小為n的deque
deque<elem> c(n,t) //建立一個大小為n的deque,每個元素值都是t
deque<elem> c(beg,end) //建立一個deque,以區間[beg,end)作為元素初值
c.~deque() //銷毀所有元素,釋放內存
注意:deque因為內存區塊的問題,不提供容量操作
2.非更易型操作
c.empty() //返回容器是否為空
c.size() //返回目前的元素個數
c.max_size() //返回元素個數之最大可能量
c.shrink_to_fit() //要求降低容量,以符合元素個數
c[id] //返回索引id指向的元素,不檢查范圍
c.at(id) //返回索引id指向的元素,如果超出范圍就跑出range-error異常
c.front() //返回第一元素
c.back() //返回最末元素
c.begin() //返回一個迭代器指向第一元素
c.end() //返回一個迭代器指向最末元素的下一位置
c.rbegin() //返回一個反向迭代器指向反向迭代的第一元素
c.rend() //返回一個反向迭代器指向反向迭代的最末元素的下一位置
3.更易型操作
c=c2 //將c2的全部元素賦給c
c.push_back(elem) //附加一個elem的拷貝於末尾
c.pop_back() //移除最后一個元素,但是不返回它
c.push_front(elem) //在頭部插入一個elem的拷貝
c.pop_front() //移除第一個元素,但是不返回它
c.assign(n,elem) //復制n個elem,賦值給c
c.assign(beg,end) //將區間[beg,end)所有元素賦值給c
c.insert(pos,elem) //在iterator位置pos之前方插入一個elem拷貝,並返回新元素的位置
c.insert(pos,n,elem) //在ierator位置pos之前方插入n個elem拷貝,並返回第一個新元素的位置,若沒有元素,則返回pos
c.insert(pos,beg,end) //在ierator位置pos之前方插入區間[beg,end)內所有元素的拷貝,並返回第一個新元素的位置,若沒有元素,則返回pos
c.erase(pos) //移除iterator位置pos上的元素,返回下一個元素的位置
c.erase(beg,end) //移除區間[beg,end)內的所有元素,返回下一個元素的位置
c.resize(num) //將元素數量改為num,如果size()變大,多出的新元素都要以default函數初始化
c.resize(num,elem) //將元素數量改為num,如果size()變大,多出新元素都是elem的拷貝
c.clear() //移除所有元素,清空容器
注意:在deque為空的情況下,assgin()和insert()我們建議使用前者。
deque的操作並不復雜,在以下情形中最好采用deque:
- 需要在兩端安插和移除元素(畢竟雙端隊列)
- 無需指向容器內的元素
- 要求不再使用的元素必須釋放