Table of Contents

stl 提供了三个最基本的容器: vector, list, deque.

vector

vector 为存储的对象分配一块连续的地址空间, 因此对 vector 中的元素随机访问效率很高.

在 vecotor 中插入或者删除某个元素, 需要将现有元素进行复制, 移动. 如果 vector 中存储的对象很大, 或者构造函数复杂, 则在对现有元素进行拷贝时开销较大, 因为拷贝对象要调用拷贝构造函数. 对于简单的小对象, vector 的效率优于 list.

vector 在每次扩张容量的时候, 将容量扩展 2 倍, 这样对于小对象来说, 效率是很高的.

list

list 就是数据结构中的双向链表 (根据 sgi stl 源代码), 因此它的内存空间可以是不连续的, 通过指针来进行数据的访问, 这个特点使得它的随即存取变的非常没有效率, 因此它
没有提供 [ ] 操作符的重载; 但由于链表的特点, 它可以以很好的效率支持任意地方的删除和插入.

就 Vector 和 List 而言:

deque

deque 是一个双向队列, 它的具体实现不太清楚, 但知道它具有以下两个特点:

因此在实际使用时, 如何选择这三个容器中哪一个, 应根据你的需要而定, 一般应遵循下面的原则:

总结