Chinaunix首页 | 论坛 | 博客
  • 博客访问: 21817
  • 博文数量: 17
  • 博客积分: 880
  • 博客等级: 准尉
  • 技术积分: 205
  • 用 户 组: 普通用户
  • 注册时间: 2009-05-12 14:02
文章分类
文章存档

2011年(1)

2010年(2)

2009年(14)

我的朋友
最近访客

分类: C/C++

2010-01-27 14:56:22

                                   vector与list区别
  vector为存储的对象分配一块连续的地址空间,因此对vector中的元素随机访问效率很高。在vecotor中插入或者删除某个元素,需要将现有元素进行复制,移动。如果vector中存储的对象很大,或者构造函数复杂,则在对现有元素进行拷贝时开销较大,因为拷贝对象要调用拷贝构造函数。对于简单的小对象,vector的效率优于list。vector在每次扩张容量的时候,将容量扩展2倍,这样对于小对象来说,效率是很高的。
  list中的对象是离散存储的,随机访问某个元素需要遍历list。在list中插入元素,尤其是在首尾插入元素,效率很高,只需要改变元素的指针。
  综上所述:
  vector适用:对象数量变化少,简单对象,随机访问元素频繁
  list适用:对象数量变化大,对象复杂,插入和删除频繁
  最大的区别是,list是双向的,而vector是单向的。
   因此在实际使用时,如何选择这三个容器中哪一个,应根据你的需要而定,一般应遵循下面  
    的原则:  
        1、如果你需要高效的随即存取,而不在乎插入和删除的效率,使用vector  
        2、如果你需要大量的插入和删除,而不关心随即存取,则应使用list  
        3、如果你需要随即存取,而且关心两端数据的插入和删除,则应使用deque。
  vector   表示一段连续的内存区域,每个元素被顺序存储在这段内存中,对vector   的随机访问效率很高,但对非末尾元素的插入和删除则效率非常低。
  deque  
  也表示一段连续的内存区域,但与vector不同的是它支持高效地在其首部插入和删除元素,它通过两级数组结构来实现,一级表示实际的容器,第二级指向容器的首和尾 
  
  list   表示非连续的内存区域并通过一对指向首尾元素的指针双向链接起来,插入删除效率高,随机访问效率低  
阅读(543) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~