码迷,mamicode.com
首页 > 编程语言 > 详细

C++标准库分析总结(五)——<Deque设计原则>

时间:2019-07-17 20:35:30      阅读:143      评论:0      收藏:0      [点我收藏+]

标签:拷贝   分析   img   双向   一个   type   size   vector   实现   

本节主要总结标准库Deque的设计方法和特性以及相关迭代器内部特征

1、Deque基本结构

  • Deque(双向队列)也号称连续空间,其实它使用分段拼接起来的(分段连续),各个分段间是用Vector来管理的,Vector的每个元素就是一个指针,每个指针指向一个分段,每一个分段就是一个缓冲区buffer,首位安插元素时,当缓冲区满了需要扩充时,就重新分配一个缓冲区然后串在Vector里面;
  • Deque的迭代器有4个指针,其中node表示在控制中心的位置(也就是在Vector中的位置),first表示node所指的buffer的头,last表示node所指的buffer的尾,first和last是边界的标兵,它们时不会变的,cur表示迭代器当前指向的哪个元素;
  • 分段连续的实现,当迭代器前进后者后退时,都要判断是不是走到了当前buffer的末端或者头部,都必须有能力跳到下个buffer缓冲区,如果到达边界就必须依靠node指针回到控制中心(Vector)再跳到下个buffer

技术图片

2、 Deque迭代器

Deque的迭代器sizeof是16,一个Deque包含两个迭代器,一个指针一个size_type,所以Deque的sizeof为16+16+4+4=40个字节

技术图片

技术图片

2.1 Deque的插入操作deque<T>::insert()

  由于Deque是可以两端进行扩充的,插入元素又会引入元素移动问题,进而带来拷贝构造的开销,所以在插入时首先进行判断插入位置距离首位哪边比较短,移动距离较短的一边,最大化的减少开销。

技术图片

技术图片

2.2 Deque如何实现所谓的连续空间

  Deque对外宣称是连续空间,其实它是分段连续,那么连续空间就是要模拟连续空间提供的功能,比如自增、自减、跳跃等动作,这就是迭代器的功劳。

技术图片

技术图片

技术图片 

  技术图片

技术图片

3、queue

 

C++标准库分析总结(五)——<Deque设计原则>

标签:拷贝   分析   img   双向   一个   type   size   vector   实现   

原文地址:https://www.cnblogs.com/laiyingpeng/p/11193946.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!