deque容器是双端数组,既可以向头部插入或者删除也可以向尾部插入或者删除。
- deque与vector的区别;
vector对于头部插入删除效率低,deque相比于vector,由于在头部插入删除时不用移动大量的元素,效率较高;
访问元素时,vector的速度比deque快,这和他们的内部结构有关。vector内部是一段连续的空间。而deque的
工作原理如下所示
deque内部的中控器,维护每段缓冲区中内容,中控器里的每个节点对应一个缓冲区,每个节点存储的是每段缓冲区地址。看起来像一片连续的存储空间。
2. deque的构造函数
1 deque<int> d1; //默认构造 2 3 deque<int> d2(d1.begin(),d1.end()); //区间构造 4 5 deque<int > d3(10,20); //n个ele的方式构造 6 7 deque<int> d4(d1) ;//拷贝构造
3. deque容器的赋值操作
1 deque<int >d1; 2 3 deque<int>d2; 4 d2=d1; //operator= 5 6 //assign 7 8 deque<int> d3; 9 d3.assign(d2.begin(),d2.end()); //以区间方式 10 11 dequeu<int> d4; 12 d4.assign(10,100);
4.deque容器大小操作
1 deque<int> d1; 2 //判断容器是否为空,如果为空返回true 3 d1.empty(); 4 //容器的大小,它没有容量的概念 5 d1.size(); 6 //重新指定大小 7 d1.resize(10); //默认按0填充 8 d1.resize(10,1);//超出部分按1填充
5. deque插入和删除
1 deque<int>d1; 2 d1.push_back(1);//尾插 3 d1.push_front(2);//头插 4 5 d1.pop_back();//删除容器中的最后一个元素 6 d1.pop_front();//删除容器中的第一个元素 7 8 insert(pos,elem); //在指定位置插入一个元素 9 insert(pos,n,elem); //指定位置插入n个ele; 10 insert(pos,d1.begin(),d1.end()); //知道位置插入区间元素 11 12 clear();//清空 13 erase(d1.begin(),d1.end()); //相当于clear,返回下一个数据的位置 14 erase(pos); //删除某一个位置,返回下一个位置
6. 数据存取,通过at(),[],front(),back()可以访问到相应的元素
7. deque容器排序
1 deque<int>d1; 2 //尾插 3 d1.push_back(10); 4 d1.push_back(20); 5 //头插 6 d1.push_front(30); 7 d1.push_front(40); 8 d1.push_back(20); 9 10 sort(d1.begin(), d1.end()); //默认升序 vector同意适用
stack容器是一种先进后出的容器
1 stack <int> s; 2 //入栈 3 s.push(1); 4 s.push(2); 5 //判断是否为空 6 s.empty(); 7 //出栈 8 s.pop(); 9 //返回栈顶元素 10 s.top(); 11 //返回栈的大小 12 s.size();