您的位置:首页 > 产品设计 > UI/UE

deque(1)

2016-01-08 10:00 267 查看
deque(1)

---雨竹清风

一、deque的数据结构

deque是双端队列容器,是一个采用分块的线性结构进行存储。deque分成若干的deque块。deque块由map来管理,map是一段连续的内存空间。Map记录的是每一块的首地址,map是deque的管理者。deque有2个迭代器:M_start,M_finish。每个迭代器有四个变量:M_first,M_last,M_cur,M_node。M_first是指向deque块的首元素的位置,M_last指向deque块的末尾元素的位置,M_cur指向当前访问的元素的地址。M_node是存储map中的当前deque块的数据项的地址。






二、deque的迭代器

deque的迭代器是访问deque的指针,使用方式++,--;首先是指出访问的连续空间,再者,判断自己是否是处于边缘位置,若处于边缘位置,那么将跳到前一个或者后一个deque块中。

三、与vector的区别

1)两端都能够快速的插入元素和删除元素,vector在尾端插入比较快。

2)存取元素时,deque的内部结构会多一个间接过程,所以元素的存取和迭代器的速度要慢。

3)迭代器需要在不同的区块间跳转,所以必须是特殊的智能指针,非一般指针。

4)在对内存区块有所限制的系统中,deque可以包含更多的元素,因为它使用不止一块内存。因此,deque的max_size()可能更大。



std::deque (double-ended queue),在堆中保存内容,保存形式:

[堆1]



[堆2]



[堆3]



每个堆保存好几个元素,堆和堆之间用指针指向,可以在队列前面快速的添加删除元素。



使用deque的情况:

1)
需要在两端插入和删除元素

2)
无需引用容器内的元素

3)
要求容器释放不再使用的元素



deque不提供使用容量操作;deque直接提供函数,以提供完成头部元素的插入和删除。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: