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存储这个集合比较好
     
     
     
  • 相关阅读:
    nexus
    图片水印
    springmvc+mybatis+spring+redis
    web-fragment模块化使用
    jackson的使用
    httpClient
    ftp上传文件
    windows server 2008 R2中建立ftp站点
    保存网络中的文件
    读取excel文件
  • 原文地址:https://www.cnblogs.com/gaoxianzhi/p/3243525.html
Copyright © 2011-2022 走看看