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 只占
有其包含的元素所必需的存储区额外的开销有两个方面与每个值相关联的两个附加指针
以及通过指针进行的间接访问
- vector与 list与 deque的比较
- vector与list与deque比较
- deque的用法及其与vector、list应用比较
- vector,list,deque的比较
- list与vector和deque的区别
- vector,deque,list,map,数组比较与分析
- vector,deque,list,map,数组比较与分析
- c++ list, vector,deque, map,set 区别与用法比较
- vector,deque,list,map,数组比较与分析
- 浅谈vector、deque与list
- 转@vector list 与deque
- 浅谈vector、deque与list
- vector(容器)、list(列表)、deque(双向队列)的区别与比较
- vector, list, deque 比较
- vector list deque比较
- vector list deque比较
- list迭代器与vector和deque迭代器的一点不同
- list、vector和deque容器的区别与共同点
- 内核编程-基础
- java集合类
- Linux下的内存泄露检测工具
- 将一个正整数分解质因数
- Microsoft SQL Server 2005 数据类型 与程序语言数据类型对照
- vector与 list与 deque的比较
- jacob操作Word的例子,office及pdf
- STL 简介,标准模板库
- Linux2.6 内核的 Initrd 机制解析
- 继续理解类和对象
- jquery-autocomplete的用法及参数详解
- shell脚本中printf小节
- shell基本编程
- Java Integer