博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
STL::deque以及由其实现的queue和stack
阅读量:4056 次
发布时间:2019-05-25

本文共 845 字,大约阅读时间需要 2 分钟。

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都不允许遍历,也不提供迭代器。(他们和其他容器的区别在于有特殊的数据顺序规则,先进先出和先进后出,如果允许迭代器遍历会扰乱这种规则)

转载地址:http://vyeci.baihongyu.com/

你可能感兴趣的文章
媒体广告业如何将内容资产进行高效地综合管理与利用
查看>>
能源化工要怎么管控核心数据
查看>>
媒体广告业如何运用云盘提升效率
查看>>
企业如何运用企业云盘进行数字化转型-实现新发展
查看>>
司法如何运用电子智能化加快现代化建设
查看>>
iSecret 1.1 正在审核中
查看>>
IOS开发的开源库
查看>>
IOS开发的开源库
查看>>
Jenkins - sonarqube 代码审查
查看>>
Jenkins + Docker + SpringCloud 微服务持续集成(一)
查看>>
Jenkins + Docker + SpringCloud 微服务持续集成 - 单机部署(二)
查看>>
Jenkins + Docker + SpringCloud 微服务持续集成 - 高可用集群部署(三)
查看>>
Golang struct 指针引用用法(声明入门篇)
查看>>
Linux 粘滞位 suid sgid
查看>>
C#控件集DotNetBar安装及破解
查看>>
Winform皮肤控件IrisSkin4.dll使用
查看>>
Winform多线程
查看>>
C# 托管与非托管
查看>>
Node.js中的事件驱动编程详解
查看>>
mongodb 命令
查看>>