Chinaunix首页 | 论坛 | 博客
  • 博客访问: 465268
  • 博文数量: 145
  • 博客积分: 0
  • 博客等级: 民兵
  • 技术积分: 1060
  • 用 户 组: 普通用户
  • 注册时间: 2013-08-22 11:52
个人简介

专注计算机技术: Linux Android 云计算 虚拟化 网络

文章分类

全部博文(145)

文章存档

2016年(3)

2015年(21)

2014年(75)

2013年(46)

我的朋友

分类: C/C++

2014-12-31 03:02:05

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默认分配的大小时要进行整体的重新分配、拷贝与释
                          放

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
阅读(744) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~