zoukankan      html  css  js  c++  java
  • 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删除元素时,也提供了元素的析构和空闲缓冲区空间的释放等机制。

  • 相关阅读:
    css代码中position的定位,baidu+总结
    ibatis_HelloWorld
    v7系统,任务栏的开始图标和其他图标重合问题
    递归方法:输入一个多位整数,计算出从0到该数1出现的个数。
    解决JS:window.close()在Firefox下的不能关闭的问题
    Programming in the MidFuture(转)
    修改blog问题
    面向数据库的高级语言
    F#试用感受
    基于.net的数学编程语言
  • 原文地址:https://www.cnblogs.com/crbhf/p/15072703.html
Copyright © 2011-2022 走看看