deque是双端数组。
deque和vector的区别:
- vector对于头部的插入和删除效率低,数据量越大,效率越低;
- deque相对于而言,对头部的插入和删除比vector快;
- vector访问元素时速度比deque快,这和两者的内部实现有关;
deque内部工作原理:
deque内部有个中控器,维护每段缓冲区中的内容,缓冲区中存放着真实数据。中控器维护的是每个缓冲区的地址,使得使用每个deque时像一块连续的内存空间。
deque容器的迭代器是支持随机访问的。
一、deque构造函数
deque<T> deqT deque(beg,end) deque(n,elem) deque(const deque &deq)
#include<iostream> #include<deque> using namespace std; //加入const限制只读,并使用const_iterator void printDeque(const deque<int>&d) { for (deque<int>::const_iterator it = d.begin(); it != d.end(); it++) { cout << *it <<" "; } cout << endl; } void test() { deque<int> d1; for (int i = 0; i < 10; i++) { d1.push_back(i); } printDeque(d1); deque<int> d2(d1.begin(),d1.end()); deque<int> d3(4,3); deque<int> d4(d1); } int main() { test(); system("pause"); return 0; }
二、赋值操作(基本上与vector一致)
#include<iostream> #include<deque> using namespace std; //加入const限制只读,并使用const_iterator void printDeque(const deque<int>&d) { for (deque<int>::const_iterator it = d.begin(); it != d.end(); it++) { cout << *it <<" "; } cout << endl; } void test() { deque<int> d1; for (int i = 0; i < 10; i++) { d1.push_back(i); } deque<int> d2; d2 = d1; deque<int> d3; d3.assign(d1.begin(),d1.end()); deque<int> d4; d4.assign(4, 3); } int main() { test(); system("pause"); return 0; }
三、deque大小操作(与vector也基本一致,但是deque中没有容量capaticy限制)
四、deque插入和删除
//两端插入 push_back(ele); push_front(ele); pop_back(); pop_front(); //指定位置插入、删除,pos,beg,end都是迭代器 insert(pos,ele); insert(pos,n,ele); insert(pos,beg,end); clear(); erase(beg,end); erase(pos);
五、deque数据存取(与vector一致,多了取头部的操作)
deque<int> d1 ={1,2,3,4}; 访问第一个元素: d1[0]; d1.at(0); 修改第一个元素: d1[0] = 2; d1.at(0) = 2; 访问首元素: d1.front(); 访问尾元素: d1.back();
六、deque排序(利用algorithm中的sort,默认升序排序)
#include<iostream> #include<deque> #include<algorithm> using namespace std; //加入const限制只读,并使用const_iterator void printDeque(const deque<int>&d) { for (deque<int>::const_iterator it = d.begin(); it != d.end(); it++) { cout << *it <<" "; } cout << endl; } void test() { deque<int> d1; for (int i = 0; i < 10; i++) { d1.push_front(i); } cout << "排序前:" << endl; printDeque(d1); sort(d1.begin(), d1.end()); cout << "排序后:" << endl; printDeque(d1); } int main() { test(); system("pause"); return 0; }