> 文章列表 > STL :双端队列容器 Deque

STL :双端队列容器 Deque

STL :双端队列容器 Deque

Deque

  • #include<deque>    using namesace std;

  • 双端队列容器双向开口连续线性空间;

  • 擅长尾部和头部添加或删除元素:常数阶;

  • 存储元素并不能保证所有元素都存储到连续的内存空间中;

  • deque 是动态的以分段连续空间组合而成(没有提供所谓空间保留 server 功能);

  • 是分段连续内存空间,有中央控制,维持整体连续的假象

  • deque 最大的工作就是维护分段连续的内存空间的整体性的假象,并提供随机存取的接口,避开了重新配置空间、复制、释放的轮回,代价就是复杂的迭代器架构

  • [deque 接口函数介绍](C++ deque get_allocator用法及代码示例 - 纯净天空)。

Capacity

Name Role Notice
size 返回矢量实际存储元素数目(实际数据量)
max_size 返回矢量所能存储的最大的元素数目
resize 更改矢量实际存储,指定长度若变长则默认填充新位置,变短则删除超出长度的元素
empty 判断矢量存储是否为空
shrink_to_fit 请求降低存储使得 capacity 和 size 匹配

Element access

Name Role Notice
operator[ ] 下标访问元素 越界不抛出异常,直接报错
at 返回索引所指的元素 如果越界则抛出 out_of_range
front 返回第一个元素
back 返回最后一个元素

Modifiers

Name Role Notice
assign 将数据赋值给本身 拷贝 n 个 elem :assign(n, elem)
拷贝区间数据:assign(beg, end)
push_back 在容器尾部添加一个元素
push_front 在容器头部添加一个元素
pop_back 删除容器最后一个元素
pop_front 删除容器第一个元素
insert 指定位置插入元素的拷贝 插入一个并返回位置:insert(pos, elem)
插入 n 个:insert(pos, n, elem)
插入区间 [ ) :insert(pos, beg, end)
erase 删除指定数据,返回下一个数据的位置 删除区间 [ ) :erase(beg, end)
删除指定位置:erase(pos)
swap 交换另一相同类型的双端队列的内容
clear 移除容器所有数据
emplacec11 指定位置直接构造生成一个元素
emplace_frontc11 容器头部生成一个元素,直接构造,减少复制移动
emplace_backc11 容器尾部生成一个元素,直接构造,减少复制移动

Allocator

Name Role Notice
get_allocator 获取容器双端队列的分配器

Notice

  • 相比 vector ,增加了头部添加和删除的成员函数,同时删除了 capacity( )、reverse( )、data( ) 成员函数;

  • swap(deque1, deque2) :交换存储相同类型的元素,功能相同,语法不同;