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存储这个集合比较好
     
     
     
  • 相关阅读:
    OSCP Learning Notes Buffer Overflows(3)
    OSCP Learning Notes Buffer Overflows(5)
    OSCP Learning Notes Exploit(3)
    OSCP Learning Notes Exploit(4)
    OSCP Learning Notes Exploit(1)
    OSCP Learning Notes Netcat
    OSCP Learning Notes Buffer Overflows(4)
    OSCP Learning Notes Buffer Overflows(1)
    OSCP Learning Notes Exploit(2)
    C++格式化输出 Learner
  • 原文地址:https://www.cnblogs.com/gaoxianzhi/p/3243525.html
Copyright © 2011-2022 走看看