C++ deque实现

deque是序列式容器中设计难度最大的容器,主要原因在于其特殊的数据结构和配套的迭代器设计(从deque的设计中可以看出每种容器只能由自己来设计迭代器)。

其内部首先以一块连续的空间作为map,map内的每个node指向一块连续的缓冲区,这些连续的缓冲区才是真正存放数据的位置,初始状态是它维护一个空的缓冲区,当一块缓冲区满时,需要申请一块新的缓冲区,并通过map内的一个node记录其位置,当map满时需要reallocate_map,即更换一块更大的map。由于deque内部是段式连续空间,对外表现为逻辑上的连续空间任务就交给了deque的迭代器(迭代器支持随机访问),迭代器的设计变得复杂,迭代器内部维护4个指针,node指向map中记录当前迭代器所在缓冲区的node,这是因为当迭代器需要跨缓冲区移动时它必须要通过map找到下一块缓冲区在哪,first指向当前元素所在缓冲区的第一个位置,last指向当前元素所在缓冲区最后一个位置的下一位置,cur指向缓冲区中当前迭代器所指元素的位置,通过它提领迭代器所指元素

代码实现:https://github.com/inmail/mySTL/blob/master/mySTL/6stl_deque.h

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值