STL deque实现解析

1.总体概览
  • 双向开口的连续线性空间
  • 头尾均可以常数时间插入和删除
  • 空间是动态地以分段连续空间组合而成,随时可以增加一段新的空间并链接起来,不用像vector那样重新分配新空间再拷贝
  • deque提供Random Access Iterator 但是其迭代器不是普通指针,复杂度较之于vector会高出很多,所以一般使用vector而不是deque
2.deque的中控器(map)
  • 采用一块所谓的map(并非STL的map容器),map是一小块连续空间,每个元素都是指针,指向一段连续空间(缓冲区)
  • 缓冲区才是数据存储的主体
  • 允许指定缓冲区大小,当默认值0表示缓冲区使用512字节
    在这里插入图片描述
    在这里插入图片描述
3.迭代器
  • 需要指出分段连续空间在哪,并判断是否处于缓冲器边缘,并能够跳跃到另一个缓冲区
  • 迭代器中含有三个T*指针,cur,first,last指的是迭代器所指的缓冲区中的当前元素、头、尾
  • 此外还含有一个map_pointer类型的指针(可以看为T**),指向map指针数组的一项,代表当前迭代器所属的缓冲区
3.1buffer_size,主要调用全局函数__deque_buf_size,获取缓冲区的大小

在这里插入图片描述

3.2 set_node跳跃一个缓冲区
    void set_node(map_pointer new_node){
   
        node=new_node;
        first=*new_node;
        last=first+(difference_type)buffer_size
  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值