->
#include<deque>
deque容器
双端数组,可以对头端进行插入删除操作
deque与vector区别:
vector对于头部的插入删除效率太低,数据量大,效率越低
deque而言,对头部的插入速度比vector快
vector访问元素的速度比deque快(内部实现不同)
deque工作原理:
内部有个中控器,维护每段缓冲区的内容,缓冲区存放真实数据
中控器维护的是每个缓冲区的地址,使得deque时像一片连续的内存空间
中控器
...
...
... 前
0x01 -> ele ele ele ele ele
0x02 -> ele ele ele
... 后
...
deque的迭代器也支持随机访问
构造函数:
deque<int> deqT; 默认构造函数
deque(beg,end); 构造函数将[beg,end)区间中的元素拷贝给本身
deque(n,elem); 构造函数将 n 个elem拷贝给本身
deque(const deque &deq); 拷贝构造
只读迭代器:
deque<T>::const_iterator
可读可写:
deque<T>::iterator
->
deque赋值
函数原型:
deque & operator=(const deque & deq);
assign(beg,end); 将[beg,end)区间中的数据拷贝赋值给本身
assign(n,elem); 将 n 个elem拷贝赋值给本身
for example:
d2.assign(d1.begin(),d1.end());
->
deque大小操作
函数原型:
deque.empty(); 判断容器是否为空
deque.size(); 返回容器中元素的个数
deque.resize(num);
重新指定容器的长度为num,若容器边长,则以默认值 0 填充新位置
如果容器变短,则末尾超出容器长度的元素被删除
deque.resize(num,elem);
重新指定容器的长度为num,若容器变长,则以elem值填充新位置
如果容器变短,则末尾超出容器长度的元素被删除
->
插入和删除
函数原型:
push_back(elem);
push_front(elem);
pop_back(); 删除容器
pop_front(); 删除容器第一个数据
指定位置操作:
insert(pos,elem); 在pos位置插入一个elem元素的拷贝,返回新数据的位置
insert(pos,n,elem); 在pos位置插入n个elem数据,无返回值
attention:
pos必须是iterator 第三个位置就: d.begin()+3
insert(pos,beg,end); 在pos位置插入n个elem数据,无返回值
clear(); 清空容器的所有数据
erase(beg,end); 删除[beg,end)区间的数据,返回下一个数据的位置
erase(pos); 删除pos位置的数据,返回下一个数据的位置
attention:
pos必须是iterator 第三个位置就: d.begin()+3
->
数据存取
函数原型:
at(int idx);
operator[]
front();
back();
->
deque排序
函数原型:
#include<algorithm>
sort(iterator beg,iterator end); 从小到大排序
从大到小reverse就可以了
vector也可以使用