zoukankan      html  css  js  c++  java
  • C++ 《STL源码剖析》 序列类容器

    关于序列容器就讲这么多了

    slist stack queue后面就不再写

    stack 和 queue 没有迭代器 底层实现也就是list

    slist单向list

    在此,我总结了,vector,list ,deque使用区别:
         1 如果你需要高效的随即存取,而不在乎插入和删除的效率,使用vector 
         2 如果你需要大量的插入和删除,而不关心随即存取,则应使用list 
         3 如果你需要随即存取,而且关心两端数据的插入和删除,则应使用deque

    vector适用:对象数量变化少,简单对象,随机访问元素频繁

    list适用:对象数量变化大,对象复杂,插入和删除

    1 vector

        向量 相当于一个数组     在内存中分配一块连续的内存空间进行存储。支持不指定vector大小的存储。STL内部实现时,首先分配一个非常大的内存空间预备进行存储,即 capacituy()函数返回的大小,当超过此分配的空间时再整体重新放分配一块内存存储,这给人以vector可以不指定vector即一个连续内存的大小的感觉。通常此默认的内存分配能完成大部分情况下的存储。   

    优点:

    (1) 不指定一块内存大小的数组的连续存储,即可以像数组一样操作,但可以对此数组                   进行动态操作。通常体现在push_back() pop_back()             

    (2) 随机访问方便,即支持[ ]操作符和vector.at()             

    (3) 节省空间。   

    缺点:

    (1) 在内部进行插入删除操作效率低。             

    (2) 只能在vector的最后进行push和pop,不能在vector的头进行push和pop。             

    (3) 当动态添加的数据超过vector默认分配的大小时要进行整体的重新分配、拷贝与释放

    2 list     双向链表     每一个结点都包括一个信息快Info、一个前驱指针Pre、一个后驱指针Post。可以不分配必须的内存大小方便的进行添加和删除操作。使用的是非连续的内存空间进行存储。

     优点:

    (1) 不使用连续内存完成动态操作。             

    (2) 在内部方便的进行插入和删除操作            

    (3) 可在两端进行push、pop   

    缺点:

    (1) 不能进行内部的随机访问,即不支持[ ]操作符和vector.at()             

    (2) 相对于verctor占用内存多

    3 deque    双端队列 double-end queue    deque是在功能上合并了vector和list。   

    优点:

    (1) 随机访问方便,即支持[ ]操作符和vector.at()             

    (2) 在内部方便的进行插入和删除操作             

    (3) 可在两端进行push、pop   

    缺点:(1) 占用内存多

    使用区别:     

    1 如果你需要高效的随即存取,而不在乎插入和删除的效率,使用vector     

    2 如果你需要大量的插入和删除,而不关心随即存取,则应使用list     

    3 如果你需要随即存取,而且关心两端数据的插入和删除,则应使用deque

  • 相关阅读:
    day 66 ORM django 简介
    day 65 HTTP协议 Web框架的原理 服务器程序和应用程序
    jQuery的事件绑定和解绑 事件委托 轮播实现 jQuery的ajax jQuery补充
    background 超链接导航栏案例 定位
    继承性和层叠性 权重 盒模型 padding(内边距) border(边框) margin 标准文档流 块级元素和行内元素
    属性选择器 伪类选择器 伪元素选择器 浮动
    css的导入方式 基础选择器 高级选择器
    03-body标签中相关标签
    Java使用内存映射实现大文件的上传
    正则表达式
  • 原文地址:https://www.cnblogs.com/MengX/p/12336307.html
Copyright © 2011-2022 走看看