容器:各类容器的不同特点

 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存储这个集合比较好
 
 
 

posted on 2013-08-07 17:08  shoutcharter  阅读(226)  评论(0编辑  收藏  举报

导航