现在的位置: 首页 > 综合 > 正文

STL容器之deque

2013年01月29日 ⁄ 综合 ⁄ 共 1862字 ⁄ 字号 评论关闭

该标准容器是一个定义在namespace std中的模板,该模板的原型声明在头文件中。Deque是一个双向队列,也是一个优先队列,是一种具有队列和栈的性质的数据结构。在deque的两个尾部的操作和list是一样的高效,对元素的下标操作的效率又与vector类似,而对容器元素的插入和删除操作的效率则介于listvector之间。

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 vectorlistdeque 小结

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/

 

 

抱歉!评论已关闭.