c++ double ended queues(双向队列)成员函数列表参考
双向队列和向量很相似,但是它允许在容器头部快速插入和删除(就像在尾部一样)。
Deque成员函数如下:
Constructors创建一个新双向队列
Operators比较和赋值双向队列
assign()设置双向队列的值
at()返回指定的元素
back()返回最后一个元素
begin()返回指向第一个元素的迭代器
clear()删除所有元素
empty()返回真如果双向队列为空
end()返回指向尾部的迭代器
erase()删除一个元素
front()返回第一个元素
get_allocator()返回双向队列的配置器
insert()插入一个元素到双向队列中
max_size()返回双向队列能容纳的最大元素个数
pop_back()删除尾部的元素
pop_front()删除头部的元素
push_back()在尾部加入一个元素
push_front()在头部加入一个元素
rbegin()返回指向尾部的逆向迭代器
rend()返回指向头部的逆向迭代器
resize()改变双向队列的大小
size()返回双向队列中元素的个数
swap()和另一个双向队列交换元素
C++ STL容器deque和vector很类似,也是采用动态数组来管理元素。
使用deque之前需包含头文件:
#include <deque>
它是定义在命名空间std内的一个class template:
template<class _Ty,
class _Ax = allocator<_Ty> >
class deque;
第一个template参数用来表示元素型别,第二个可有可无,指定内存模型。一般使用默认的内存模型。
与vector不同的是deque的动态数组首尾都开放,因此能够在首尾进行快速地插入和删除操作,
deque的内部结构
deque是一种优化了的对序列两端元素进行添加和删除操作的基本序列容器。通常由一些独立的区块组成,第一区块朝某方向扩展,最后一个区块朝另一方 向扩展。它允许较为快速地随机访问但它不像vector一样把所有对象保存在一个连续的内存块,而是多个连续的内存块。并且在一个映射结构中保存对这些块以及顺序的跟踪。
deque的特点:
1、支持随机访问,即支持[]以及at(),但是性能没有vector好。
2、可以在内部进行插入和删除操作,但性能不及list。
deque和vector的不同之处:
1、两端都能够快速插入和删除元素。vector只能在尾端进行。
2、deque的元素存取和迭代器操作会稍微慢一些。因为deque的内部结构会多一个间接过程。
3、迭代器是特殊的智能指针,而不是一般指针。它需要在不同的区块之间跳转。
4、deque可以包含更多的元素,其max_size可能更大。因为不止使用一块内存。
5、不支持对容量和内存分配时机的控制。
6、deque的内存区块不再被使用时,会被释放。deque的内存大小是可缩减的。不过,是不是这么做以及怎么做由实作版本定义。
deque和vector相似的特性:
1、在中间部分插入和删除元素相对较慢,因为所有元素都要被移动。
2、迭代器属于随即存取迭代器。
最好采用deque的情形:
1、需要在两端插入和删除元素。
2、无需引用容器内的元素。
3、要求容器释放不再使用的元素。