STL::deque以及由其实现的queue和stack

deque双向队列,可在头尾插入和删除。

在这里插入图片描述
存储方式:在内存中分段连续。
其iterator的功劳:当迭代器指到一个buffer的边界时会进行判断,有能力跳入下一个或者前一个buffer,形成连续的假象(模拟连续储存)。

GNU2.9 中deque模板含三个参数,允许指定buffer大小(GNU4.53以后不再允许)
在这里插入图片描述
第三个参数为缓冲区大小,默认值为0表示使用预设值,若为n(n!=0)则表示每个buffer内能放n个元素。预设值为512byte,每个buffer能放元素的个数为: 512/sizeof(value_type)

一个deque内含有4个数据

在这里插入图片描述
两个iterator类型的迭代器分别指向头和尾。map指向一个vector,这vector是deque的控制中心,其中每一个元素(node)指向一个buffer,buffer内存放deque的真正元素。map_size是这个控制中心vector的size。

这个vector每次2倍扩容时与一般vector的区别:map所指的实现控制中心的vector每次扩容时将数据拷贝至新vector的中间,以便前后都可以添加元素。
sizeof()一个daque: 4*4+4*4+4+4=40

deque的iterator类

iterator内含有4个数据,都是指针
在这里插入图片描述
cur是迭代器实际所指的deque中的元素。
first和last指向当前数据所在buffer的首尾。
node指向当前数据在控制中心中所属的元素。

一个deque类的构成:

在这里插入图片描述

deque,stack,queue之间的联系:

在这里插入图片描述
queue和stack实现方法都是内含有一个deque作为底层结构,然后只使用其部分功能,并没有自己特殊的结构。
queue和stack也称为容器适配器(container adapter

stack和queue都不允许遍历,也不提供迭代器。(他们和其他容器的区别在于有特殊的数据顺序规则,先进先出和先进后出,如果允许迭代器遍历会扰乱这种规则)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值