功能:双端数组,可以对头端进行插入删除操作
deque与vector区别:
1.vector对于头部的插入删除效率低,数据量越大,效率越低
2.deque相对而言,对头部的插入删除速度比vector快
3.vector访问元素时的速度比deque快,这是因为两者的内部实现不同
deque内部工作原理:
内部有中控器,维护每段缓冲区中的内容,缓冲区中存放真实数据
中控器维护的是每个缓冲区的地址,使得使用deque时像一片连续的内存空间
deque容器的迭代器也是支持随机访问
deque容器的构造函数
#include#include #include using namespace std; void printdeque(deque &d1) { for (deque ::iterator it = d1.begin(); it != d1.end(); it++) { cout << *it << " "; } cout << endl; } //在上述函数中it是可以通过诸如*it=100进行修改的 // 如果想要其无法修改,除了在参数中对容器进行const常量化操作,还要修改迭代器名称为const_iterator //void printdeque(const deque & d1) //{ // for (deque ::const_iterator it = d1.begin(); it != d1.end(); it++) // { // cout << *it << " "; // } // cout << endl; //} //deque容器的构造函数 void test1() { deque d1; for (int i = 0; i < 10; i++) { d1.push_back(i); } printdeque(d1); deque d2(d1.begin(), d1.end()); deque d3(10, 100); deque d4(d3); }
deque赋值操作
#include#include #include using namespace std; void printdeque(const deque &d1) { for (deque ::const_iterator it = d1.begin(); it != d1.end(); it++) { cout << *it << " "; } cout << endl; } //deque容器的赋值操作 void test1() { deque d1; for (int i = 0; i < 10; i++) { d1.push_back(i); } deque d2; d2 = d1; deque d3; d3.assign(d1.begin(), d1.end()); deque d4; d4.assign(10, 100); }
deque的大小操作
#include#include #include using namespace std; void printdeque(const deque &d1) { for (deque ::const_iterator it = d1.begin(); it != d1.end(); it++) { cout << *it << " "; } cout << endl; } //deque容器的大小操作 void test1() { deque d1; for (int i = 0; i < 10; i++) { d1.push_back(i); } if (d1.empty()) { cout << "为空" << endl; } else { cout << "不为空" << endl; } //deque没有容量概念 d1.resize(15); //比原来长时用0填充,且可以修改默认值 d1.resize(15, 2); //比原来短时会把后面的数值删除 d1.resize(5); }
deque容器的插入和删除
#include#include #include using namespace std; void printdeque(const deque &d1) { for (deque ::const_iterator it = d1.begin(); it != d1.end(); it++) { cout << *it << " "; } cout << endl; } //deque容器的大小操作 void test1() { deque d1; //尾插 d1.push_back(10); d1.push_back(20); //头插 d1.push_front(60); d1.push_front(50); //头删 d1.pop_front(); //尾删 d1.pop_back(); //指定某一位置插入,insert,需要提供迭代器 d1.insert(d1.begin(), 1000); d1.insert(d1.begin(), 2,100);//在该位置插入两个100 //按区间进行插入 deque d2; d2.push_back(2); d2.push_back(2); d2.push_back(2); d1.insert(d1.begin(), d2.begin(), d2.end());//在d1的begin位置插入d2的某一区间的数字 //删除 d1.erase(d1.begin() + 1); //按区间删除 d1.erase(d1.begin(), d1.end()); }
deque数据存取
#include#include #include using namespace std; void printdeque(const deque &d1) { for (deque ::const_iterator it = d1.begin(); it != d1.end(); it++) { cout << *it << " "; } cout << endl; } //deque容器的大小操作 void test1() { deque d; d.push_back(10); d.push_back(20); d.push_back(30); d.push_back(40); d.push_back(50); d.push_back(60); //通过[]方式访问 for (int i = 0; i < d.size(); i++) { cout << d[i] << " "; } cout << endl; for (int i = 0; i < d.size(); i++) { cout << d.at(i) << " "; } cout << endl; cout << d.front() << endl; cout << d.back() << endl; }
deque容器的排序操作
#include#include #include using namespace std; void printdeque(const deque &d1) { for (deque ::const_iterator it = d1.begin(); it != d1.end(); it++) { cout << *it << " "; } cout << endl; } //deque容器的排序 void test1() { deque d; d.push_back(10); d.push_back(2); d.push_back(30); d.push_back(4); d.push_back(50); d.push_back(6); sort(d.begin(), d.end());//sort默认排序为从小到大升序 }



