1. deque簡介
deque(包含頭文件#include<deque>)由若干段連續空間串接而成,一旦有必要在deque的頭部或尾端增長新的空間,便配置一段定量連續的空間,串接在deque的頭部或尾端。deque的最大任務,就是在這些分段連續的空間上維護其總體連續的假象,並提供隨機存取的接口。算法
實際上。deque內部會維護一個map(注意!不是STL中的map容器)即一小塊連續的空間,該空間中每一個元素都是指針,指向另外一段(較大的)區域,這個區域稱爲緩衝區,緩衝區用來保存deque中的數據。所以deque在隨機訪問和遍歷數據會比vector慢。它首次插入一個元素,默認會動態分配512字節空間,當這512字節空間用完後,它會再動態分配本身另外的512字節空間,而後虛擬地連在一塊兒。deque的這種設計使得它具備比vector複雜得多的架構、算法和迭代器設計。它的隨機訪問和遍歷性能比vector差。架構
deque是一種優化了的對序列兩端元素進行添加和刪除操做的基本序列容器。一般由一些獨立的區塊組成,第一區塊朝某方向擴展,最後一個區塊朝另外一方向擴展。它容許較爲快速地隨機訪問但它不像vector同樣把全部對象保存在一個連續的內存塊,而是多個連續的內存塊。而且在一個映射結構中保存對這些塊以及順序的跟蹤。函數
2. 基本函數
2.1 構造函數
- deque<Elem> c建立一個空的deque;
- deque<Elem> c1(c2)複製一個deque;
- deque<Elem> c(n)建立一個deque,含有n個數據,數據均已缺省構造產生;
- deque<Elem> c(n, elem)建立一個含有n個elem拷貝的deque;
- deque<Elem> c(begin,end)建立一個以[beg;end)區間的deque;
- c.~deque<Elem>() 銷燬全部數據,釋放內存。
2.2 增長函數
- c.push_front(elem) 在頭部插入一個數據。
- c.push_back(elem) 在尾部加入一個數據。
- c.insert(pos,elem)在pos位置插入一個elem拷貝,傳回新數據位置。
- c.insert(pos,n,elem)在pos位置插入>n個elem數據。無返回值。
- c.insert(pos,begin,end)在pos位置插入在[begin,end)區間的數據。無返回值。
2.3 刪除函數
- c.pop_back() 刪除最後一個數據。
- c.pop_front() 刪除頭部數據。
- c.erase(pos)刪除pos位置的數據,傳回下一個數據的位置。
- c.erase(beg,end) 刪除[beg,end)區間的數據,傳回下一個數據的位置。
- c.clear() 移除容器中全部數據。
2.4 遍歷函數
- c.at(idx) 傳回索引idx所指的數據,若是idx越界,拋出out_of_range。
- c.front() 傳回第一個數據。
- c.back() 傳回最後一個數據,不檢查這個數據是否存在。
- c.begin() 指向迭代器中的第一個數據地址。
- c.end() 指向迭代器中的最後一個數據地址。
- c.rbegin() 傳回一個逆向隊列的第一個數據。
- c.rend() 傳回一個逆向隊列的最後一個數據的下一個位置。
2.5 判斷函數
2.6 大小函數
- c.max_size() 返回容器中最大數據的數量。
- c.size() 返回容器中實際數據的個數。
- c.resize(num) 從新指定隊列的長度。
2.7 其餘函數
- c.assign(begin,end) 將[begin; end)區間中的數據賦值給c。
- c.assign(n,elem) 將n個elem的拷貝賦值給c。
- get_allocator 使用構造函數返回一個拷貝。
- c1.swap(c2) 將c1和c2元素互換。
- swap(c1,c2) 將c1和c2元素互換。