又称双端数组,可以对头端进行插入删除操作。
Deque与vector的区别:
1、vector对于头部的插入和删除效率低,数据量越大,效率越低。
2、deque相对而言,头部操作更快。
3、vector访问元素的速度波deque快。
Deque内部有一个中控器,维护每段缓冲区中的内容,缓冲区中存放真实的数据。中控器维护的是每个缓冲区的地址,使得使用deque时就像是一片连续的内存空间。
Deque<T> deq; | 默认构造 |
Deque(beg,end); | 构造函数将[beg,end]区间的元素拷贝给本身 |
Deque(n,elem); | 构造函数将n个elem拷贝给本身 |
Deque(const deque& deq); | 拷贝构造函数 |
- #include<iostream>
- #include<deque>
- using namespace std;
- void printDeque(const deque<int>& d)
- {
- //声明一个只读的迭代器
- for (deque<int>::const_iterator it = d.begin(); it != d.end(); it++)
- {
- cout << *it << " ";
- }
- cout << endl;
- }
- void test01()
- {
- deque<int> d1;
- for (int i = 0; i < 10; i++)
- {
- d1.push_back(i);
- }
- printDeque(d1);
- }
-
- int main()
- {
- test01();
- }
= | 使用等号赋值 |
Assign(beg,end) | 将[beg,end]区间中的数据拷贝赋值给本身 |
Assign(n,elem) | 将n个elem拷贝赋值给本身 |
|
|
Deque.empty(); | 判断容器是否为空 |
Deque.size(); | 返回容器中元素的个数(与vector不同,deque没有容量) |
Deque.resize(num); | 重新指定容器的长度为num,若容器变长,则以默认值填充新位置;若容器变短,则末尾超出容器长度的元素被删除。 |
Deque.resize(num,elem); | 重新指定容器的长度为num,若容器变长,则以elem填充新位置;若容器变短,则末尾超出容器长度的元素被删除。 |
- #include<iostream>
- #include<deque>
- using namespace std;
- void printDeque(const deque<int>& d)
- {
- //声明一个只读的迭代器
- for (deque<int>::const_iterator it = d.begin(); it != d.end(); it++)
- {
- cout << *it << " ";
- }
- cout << endl;
- }
- void test01()
- {
- deque<int> d1;
- for (int i = 0; i < 10; i++)
- {
- d1.push_back(i);
- }
- printDeque(d1);
- if (d1.empty())
- {
- cout << "d1为空!" << endl;
- }
- else
- {
- cout << "d1不为空!" << endl;
- cout << "d1的大小为:" << d1.size() << endl;
- //deque没有容量的概念
- }
-
- d1.resize(15);
- printDeque(d1);
-
- d1.resize(15,1);
- printDeque(d1);
-
- d1.resize(5);
- printDeque(d1);
- }
-
- int main()
- {
- test01();
- }
Push_back(elem); | 在容器尾部添加一个数据 |
Push_front(elem); | 在容器头部添加一个数据 |
Pop_back(); | 删除容器中最后一个元素 |
Pop_front(); | 删除容器第一个元素 |
Insert(pos,elem); | 在pos位置插入一个elem,返回新数据的位置,位置要用迭代器表示 |
Insert(pos,n,elem); | 在pos位置插入n个elem,无返回值 |
Insert(pos,beg,end); | 在pos位置插入[beg,end]区间的数据,无返回值 |
Clear(); | 清空容器的所有数据 |
Erase(beg,end); | 删除[beg,end]区间的数据,返回下一个数据的位置 |
Erase(pos); | 删除pos未知的数据,返回下一个数据的位置 |
- #include<iostream>
- #include<deque>
- using namespace std;
- void printDeque(const deque<int>& d)
- {
- //声明一个只读的迭代器
- for (deque<int>::const_iterator it = d.begin(); it != d.end(); it++)
- {
- cout << *it << " ";
- }
- cout << endl;
- }
- void test01()
- {
- deque<int> d1;
- //尾插
- d1.push_back(1);
- d1.push_back(2);
- //头插
- d1.push_front(3);
- d1.push_front(4);
- printDeque(d1);
-
- //尾删
- d1.pop_back();
- printDeque(d1);
- //头删
- d1.pop_front();
- printDeque(d1);
- }
- void test02()
- {
- deque<int> d1;
- d1.push_back(1);
- d1.push_back(2);
- d1.push_front(3);
- d1.push_front(4);
- printDeque(d1); // 4 3 1 2
-
- //insert插入
- d1.insert(d1.begin(), 1000);
- printDeque(d1); //1000 4 3 1 2
- d1.insert(d1.begin(), 2, 100);
- printDeque(d1); //100 100 1000 4 3 1 2
-
- //按照区间插入
- deque<int> d2;
- d2.push_back(1);
- d2.push_back(2);
- d2.push_back(3);
- d1.insert(d1.begin(), d2.begin(), d2.end());
- printDeque(d1); //1 2 3 100 100 1000 4 3 1 2
- }
- void test03()
- {
- deque<int> d1;
- d1.push_back(1);
- d1.push_back(2);
- d1.push_front(3);
- d1.push_front(4);
- //删除
- deque<int>::iterator it = d1.begin();
- it++;
- d1.erase(it);
- printDeque(d1);//4 1 2
- }
- int main()
- {
- //test01();
- //test02();
- test03();
- }
At(int idx) | 返回索引idx所指的数据 |
[] | 中括号 |
Front() | 返回容器中第一个元素 |
Back() | 返回容器中最后一个元素 |
#include<algorithm> //需要包含头文件
Sort(iterator beg, iterator end); //对beg和end区间内的元素进行排序
Sort默认升序排列,