vector与 list与 deque的比较

来源:互联网 发布:国家宏观经济数据 编辑:程序博客网 时间:2024/05/17 23:17

vector   表示一段连续的内存区域每个元素被顺序存储在这段内存中对vector   的随机   
  访问比如先访问元素5   然后访问15   然后再访问7   等等效率很高因为每次访问离vector   
  起始处的位移都是固定的但是在任意位置而不是在vector   末尾插人元素则效率很低   
  因为它需要把待插入元素右边的每个元素都拷贝一遍类似地删除任意一个而不是vector   
  的最后一个元素效率同样很低因为待删除元素右边的每个元素都必须被复制一遍这种   
  代价对于大型的复杂的类对象来说尤其大一个deque   也表示一段连续的内存区域但   
  是与vector   不同的是它支持高效地在其首部插入和删除元素它通过两级数组结构来实   
  现一级表示实际的容器第二级指向容器的首和尾   
  list   表示非连续的内存区域并通过一对指向首尾元素的指针双向链接起来从而允许   
  向前和向后两个方向进行遍历在list   的任意位置插入和删除元素的效率都很高指针必须   
  被重新赋值但是不需要用拷贝元素来实现移动另一方面它对随机访问的支持并不好   
  访问一个元素需要遍历中间的元素另外每个元素还有两个指针的额外空间开销   
  下面是选择顺序容器类型的一些准则   
  如果我们需要随机访问一个容器则vector   要比list   好得多   
  如果我们已知要存储元素的个数则vector   又是一个比list   好的选择   
  如果我们需要的不只是在容器两端插入和删除元素则list   显然要比vector   好   
  除非我们需要在容器首部插入和删除元素否则vector   要比deque   好

  如果我们既需要随机访问元素又需要随机插入和删除元素那么又该怎么办呢我们   
  需要在随机访问的代价和拷贝右边或左边相邻元素的代价之间进行折衷一般来说   
  应该是由应用程序的主要操作查找或插入来决定容器类型的选择为了做这个决定   
  我们可能需要知晓两种容器类型的性能如果两种容器类型的性能都不能够使我们满意   
  则需要自己设计更复杂的数据结构   
  当我们不知道需要存储的元素的个数即容器需要动态增长并且不需要随机访问元   
  素以及在首部或者中间插入元素时我们该如何决定选择哪一个容器类型呢在这种情况   
  下list   和vector   哪一个更有效我们将把这个问题的答案推延到下一节   
  list   以简单方式增长每当一个新对象被插入到list   中时插入处的两个元素的前指针和   
  后指针被重新赋值为指向新对象新对象的前后指针被初始化为指向这两个元素list   只占   
  有其包含的元素所必需的存储区额外的开销有两个方面与每个值相关联的两个附加指针   
  以及通过指针进行的间接访问  


原创粉丝点击