• 30、STL中的deque的实现


    vector是单向开口(尾部)的连续线性空间,deque则是一种双向开口的连续线性空间,虽然vector也可 以在头尾进行元素操作,但是其头部操作的效率十分低下(主要是涉及到整体的移动)

    deque和vector的最大差异一个是deque运行在常数时间内对头端进行元素操作,二是deque没有容量的概 念,它是动态地以分段连续空间组合而成,可以随时增加一段新的空间并链接起来

    deque虽然也提供随机访问的迭代器,但是其迭代器并不是普通的指针,其复杂程度比vector高很多,因 此除非必要,否则一般使用vector而非deque。如果需要对deque排序,可以先将deque中的元素复制到 vector中,利用sort对vector排序,再将结果复制回deque

    deque由一段一段的定量连续空间组成,一旦需要增加新的空间,只要配置一段定量连续空间拼接在头 部或尾部即可,因此deque的最大任务是如何维护这个整体的连续性

     deque的数据结构如下:

    从deque的迭代器数据结构可以看出,为了保持与容器联结,迭代器主要包含上述4个元素

    deque迭代器的“++”、“--”操作是远比vector迭代器繁琐,其主要工作在于缓冲区边界,如何从当前缓冲 区跳到另一个缓冲区,当然deque内部在插入元素时,如果map中node数量全部使用完,且node指向的缓 冲区也没有多余的空间,这时会配置新的map(2倍于当前+2的数量)来容纳更多的node,也就是可以指 向更多的缓冲区。在deque删除元素时,也提供了元素的析构和空闲缓冲区空间的释放等机制。

  • 相关阅读:
    五大Java开源论坛
    mysql limit,offset 区别
    查询某个字段存在于哪几个表
    C++分享笔记:5X5单词字谜游戏设计
    Linux分享笔记:系统状态检测命令小结
    Linux分享笔记:查看帮助命令 & 常用系统工作命令
    数据结构(C语言)分享笔记:数据结构的逻辑层次、存储层次
    Linux分享笔记:shell终端的介绍
    Java开发学生管理系统
    JAVA使用JDBC连接,修改MySQL数据库(比较乱)
  • 原文地址:https://www.cnblogs.com/crbhf/p/15072703.html
Copyright © 2020-2023  润新知