zoukankan      html  css  js  c++  java
  • 容器:各类容器的不同特点

     1 vector

        向量 相当于一个数组
       

       优点:   (1) 不指定一块内存大小的数组的连续存储,即可以像数组一样操作,但可以对此数组
                        进行动态操作。通常体现在push_back() pop_back()
                   (2) 随机访问方便,即支持[ ]操作符和vector.at()
                   (3) 节省空间。

       缺点:    (1) 在内部进行插入删除操作效率低。
                   (2) 只能在vector的最后进行push和pop,不能在vector的头进行
    push和pop。
                   (3) 当动态添加的数据超过vector默认分配的大小时要进行整体的重新分配、拷贝与释放 

    list
        双向链表
        每一个结点都包括一个信息快Info、一个前驱指针Pre、一个后驱指针Post。可以不分配必须的内存大小方便的进行添加和删除操作。使用的是非连续的内存空间进行存储。
       优点:    (1) 不使用连续内存完成动态操作。
                   
    (2) 在内部方便的进行插入和删除操作
                   (3) 可在两端进行push、pop
       缺点:    (1) 
    不能进行内部的随机访问,即不支持[ ]操作符和vector.at()
                   (2) 相对于verctor占用内存多

    deque

       双端队列 double-end queue
       deque是在功能上合并了vector和list。
       优点:    (1) 随机访问方便,即支持[ ]操作符和vector.at()
                   
    (2) 在内部方便的进行插入和删除操作
                   (3) 可在两端进行push、pop
       缺点:   
    (1) 占用内存多
     
    4 set
     
        set是集合,set中不会包含重复的元素,这是和vector的第一个区别,
       
         第二个区别是set内部用平衡二叉树实现,便于元素查找,
     
        而vector是使用连续内存存储,便于随机存取。

        set 对 find 是比较快的,因此,可以做类似数据库的用法,前提是不需要遍历!

        set 的插入删除比vector快,比list 慢(要排序),但set没办法用【】

    使用区别:
         1 如果你需要高效的随即存取,而不在乎插入和删除的效率,使用vector 
        
         2 如果你需要大量的插入和删除,而不关心随即存取,则应使用list 
        
         3 如果你需要随即存取,而且关心两端数据的插入和删除,则应使用deque
         
        4 如果你要查找一个元素是否在某集合内存中,则使用set存储这个集合比较好
     
     
     
  • 相关阅读:
    NOI-1.1-04输出保留3位小数的浮点数
    百练7619-合影效果-2015正式D题-简单排序&输出格式
    百练6376-二维数组右上左下遍历-2015正式C题
    C++ 开发环境配置
    go语言 http学习
    Git 命令及分支管理学习
    配置go语言编辑环境
    DNS的过程
    Split Array into Consecutive Subsequences
    组委会正在为美团点评CodeM大赛的决赛设计新赛制
  • 原文地址:https://www.cnblogs.com/gaoxianzhi/p/3243525.html
Copyright © 2011-2022 走看看