该标准容器是一个定义在namespace std中的模板,该模板的原型声明在头文件中。Deque是一个双向队列,也是一个优先队列,是一种具有队列和栈的性质的数据结构。在deque的两个尾部的操作和list是一样的高效,对元素的下标操作的效率又与vector类似,而对容器元素的插入和删除操作的效率则介于list和vector之间。
1 deque构造函数
deque intdeuqe0;
deque intdeuqe1 ( 3 );
deque intdeuqe2 ( 5, 2 );
deque intdeuqe3 ( 3, 1, intdeuqe 2.get_allocator( ) );
deque intdeuqe4 (intdeuqe 2 );
2 deque中函数
表一 访问队列容器中元素的操作
表达式 | 作用 |
assign() | 擦除队列中的元素并把新的元素复制到目标队列中 |
get_allocator() | 返回构造队列的分配器 |
at(index) [] | 返回由index指定的位置上的元素 |
front() | 返回第一个元素 (不检查容器是否为空) |
back() | 返回最后一个元素(不检查容器是否为空) |
pop_back() | 删除一元素到队列尾 |
pop_front() | 删除一元素到队列头 |
push_back() | 增加队列尾的一个元素 |
push_front() | 增加队列头的一元素 |
empty() | 判断队列是否为空,如果是空,返回true。 |
begin() | 返回第一个元素的指针(iterator) |
end() | 返回最后一个元素的位置的指针(list为空时end()=begin()) |
rbegin() | 返回队列最后一元素位置后向指针(reverse_iterator or const) |
rend() | 返回队列第一元素位置的后向指针 |
clear() | 从容器中删除所有元素 |
erase(position) | 删除由position指定的位置上的元素 |
erase(beg,end) | 删除从beg到end-1之间的所有元素 |
insert(position, elem) | 将elem的一个拷贝插入到由position指定的位置上,并返回新元素的位置 |
insert(position, n, elem) | 将elem的n个拷贝插入到由 position指定的位置上 |
insert(position, beg, end) | 将从beg到end-1之间的所有元素的拷贝插入到队列中由position指定的位置上 |
resize(num) | 将元素个数改为num。如果size()增加,默认的构造函数负责创建这些新元素 |
resize(num, elem) | 将元素个数改为num。如果size()增加,默认的构造函数将这些新元素初始化为elem |
size() | 队列当前的元素个数 |
max_size() | 队列的最大长度 |
swap() | 交换两个队列(两个重载) |
2 vector、list和deque 小结
vector:
向量容器,使用线性存储结构,可以像数组一样随机(下标)访问元素,还可以在尾部插入元素(用push_back()函数)。特点:访问元素速度快,但插入、删除操作速度慢;
list:
链表容器,数据元素是通过链表指针串连成逻辑意义上的线性表,但在物理内存中数据可以是不连续的。特点:对链表的任一位置的元素进行插入、删除和查找操作都是极快速的,但由于通过指针串连而成(这里的指针也占用了内存空间),不能通过下标访问元素,因此list容器访问元素的速度比vector慢;
deque:
双端队列容器,跟vector一样采用线性表存储结构,但与vector唯一不同的是,deque采用分块的线性存储结构来存储数据,每块的大小一般为512字节,称为一个deque块,所有的deque块使用一个Map块进行管理,每个Map数据项记录各个deque块的首地址。特点:可以在deque块的头部和尾部插入和删除元素而不需移动其他元素,所以插入和删除操作速度比vector快。一般来说,当考虑到容器元素的内存分配策略和操作的性能时,deque相对于vector更有优势。
总结:
一般来说,
当访问元素次数比较多时,用vector比较好;
当插入、删除、查找元素的次数比较多时,用list比较好;
当访问线性表的头部和尾部、插入、删除次数较多时,用deque比较好;
http://epluguo.blog.163.com/blog/static/968654020131230255493/