1、list、deque和vector的区别:
a、vector 模塑出来一个动态数组,在末端添加和删除元素时,性能相当好,在前端或中部插入或删除元素时,性能不怎么样。
vector 性能优异的原因是,就是分配了比其所容纳元素所需的,更多的内存空间。
- //仅分配空间,size 是不变的
- v.reserve();
- //下面两种方式是一样的。不过第一种方法只分配空间,而第二种方法还要调用构造函数
- vector<int> v;
- v.reserve(80);
- vector<int> v(80); //如果构造函数很耗时,那么推荐使用上面的方法
元素存取
deque也采用动态数组来管理元素,提供随机存取,与vector非常相似。不同的是deque的动态数组头尾都开放,因此能在头尾两端进行快速安插和删除。
迭代器无效
1. vector 插入或删除操作会使“作用点”之后的各元素的pointers, references和iterators失效,如果插入操作引发内存重新分配,那么容器上所有的pointers, references和iterators都将失效。
2. deque 插入或删除都可能引起内存重新分配,所以任何插入或删除动作都会使所有指向 deque元素的 pointers, references 和 iterators 失效。
List 与 vector或deque的区别
1.List 不支持随机存取。如果你要存取第5个元素,就必须从头开始数。
2.任何位置插入和删除都很快。
3.插入和删除不会造成其它元素pointers, references 和 iterators 失效。
4.List 的迭代器是双向迭代器,所以凡是用到随机存取的迭代器的算法(特别是排序算法)都不能用,只能用list 提供的特殊版本。