STL -- deque深度探索

13 篇文章 0 订阅

STL之deque实现详解_一个菜鸟的博客-CSDN博客_stl deque https://blog.csdn.net/u010710458/article/details/79540505

双端队列 /dek/

由多个缓冲区组成,由map控制,node到了一个buffer的尾部后,就指向下一个buffer的头
在这里插入图片描述
buffer 或者 称为 node

deque是分段连续。
对外号称连续(显现出来的特性),实际不然。

迭代器的node指向map,一个控制中心,是一个vector,里面的元素是指向各个buffer的指针。
迭代器的cur指向当前位置,first指向真 头,last指向真 尾(尾后?)
迭代器的node指向的当前的buffer

源码

在这里插入图片描述
在这里插入图片描述
sizeof(deque)是多少呢?(32位系统) start 16 finish 16 map 4 map_size(无符号整形数)4
所以sum=40 (64位系统则为80个字节大小)

insert

在这里插入图片描述
往哪里插入比较快,当然是元素少的地方,所以插入会比较前后距离
在这里插入图片描述
在这里插入图片描述

*和->的重载

在这里插入图片描述

迭代器之间的距离

在这里插入图片描述

++ – 重载

在这里插入图片描述
后++ 调用 前++
后-- 调用 前–
注:
operator++(int ) 表示前++,即i++ 返回旧值
operator++() 表示后++ 即++1 返回新值

+和+=重载

在这里插入图片描述
在这里插入图片描述
为什么这里下标运算符不返回引用呢?这样不就不能更改值了么?

后续版本

更复杂,都设计成4个class:
在这里插入图片描述
新版本不再允许指定第三个参数bufferSzie

总结

在这里插入图片描述

stack 和 queue

在这里插入图片描述
queue是内部包含一个deque,访问权限是protected
stack也一样,都是转调用。
在这里插入图片描述
stack和queue不能遍历,不提供迭代器

底层容器的选择:

在这里插入图片描述
stack和queue都可以选择list或者deque做底层容器。默认的deque速度更快。
stack可选vector,queue不可以,因为queue先进先出,而vector不提供这样的pop_front方法。
试想提供的话,每次pop_front都要把全部元素向前移动,代价太大。
在这里插入图片描述
不能选择set和map做底层容器

小结

内存模型:
deque是双向开口的连续线性空间(动态将多个连续空间通过指针数组接合在一起),随时可以增加一段新的空间,所以数据想vector里面的分配,复制,释放操作不会发生。deque头尾两端分别做插入和删除操作都是常数时间。能用vector尽量使用vector,通过deque用来做队列即可,十分方便的

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值