deque, queue 和 stack 深度探索


声明:本文中所有图件都来自B站侯捷老师授课视频

deque

deque 的实现
  • deque 的内存空间既可以向前扩张,又可以向后扩张。它的实现办法核心思想是,有一个内存控制中心(如图 1 中的 map),这个控制中心存储了一些内存地址,每个地址指向一个 buffer(连续空间),暂时视为一个 buffer 可以容纳 8 个元素(如图1,其实可以容纳的元素数量为 512 / 元素大小 )。只要在迭代器上做手脚,使得从 buffer 的端点可以平滑跨到相邻 buffer 的端点,就可以造成 deque 内存空间连续的 假象。
  • 保存 buffer 地址的控制中心 实际上是 vector ,元素类型是 指针,每次都会把指针放在 vector 的中间位置,比如 vector 容积为8,放两个指针就放在 第4,5个位置,如果deque不断添加元素,导致 控制中心的指针数量即将从 8 增加到9(或者vector前面没有空间了),就会另外分配一个容积为 16 的内存空间,然后把原来的 9 个指针放在这16个位置vector的中间位置。
    在这里插入图片描述图1. deque 的 实现原理图
    在这里插入图片描述图2. deque 的实现代码
deque 的迭代器 与 insert

在这里插入图片描述图3. deque 的迭代器的成员变量

在这里插入图片描述在这里插入图片描述
图4. deque 的 insert 函数实现

deque 如何模拟连续空间(全靠迭代器)

在这里插入图片描述图5. deque 模拟连续空间—迭代器操作符重载1
在这里插入图片描述图6. deque 模拟连续空间—迭代器操作符重载(*, &, 迭代器之间的减法)

在这里插入图片描述图7. deque 模拟连续空间—迭代器操作符重载(自增,自减)
在这里插入图片描述
图8. deque 模拟连续空间—迭代器操作符重载(相加后赋值,加上一个有符号整型数)

在这里插入图片描述图9. deque 模拟连续空间—迭代器操作符重载(相减后赋值,减去一个有符号整型数)

deque 在 GNU4.9的实现

在这里插入图片描述图10. deque 的实现(GNU4.9)
在这里插入图片描述图11. deque 的内存管理示意图(GNU4.9)

queue 和 stack

queue 的实现

在这里插入图片描述图12. queue 实现代码

stack 的实现

在这里插入图片描述
图13. stack 实现代码

queue 和 stack 的使用注意

在这里插入图片描述

在这里插入图片描述
在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值