vector是默认应使用的序列类型;当需要频繁地在序列中做插入和删除操作时,应该使用list;当大多数插入和删除操作发生在序列的头部和尾部时,deque是应考虑的数据结构。在STL的容器里面可以大致分为两类:连续内存容器和基于结点的容器。连续内存容器是指容器内存放的元素是在一块或多块内存中,每块内存存有多个元素。而基于结点的容器是像链表一样的容器,每一个小的内存中只存放一个元素。在进行删除和插入操作的时候,就像链表一样通过指针来进行操作。连续内存容器在进行删除和插入操作时,需要向前或者向后移动元素,会大大影响操作效率。
- 需要在容器的任意位置插入元素时,使用序列容器。
- 当不关心容器中的元素如何排序,那么选择哈西容器。
- 如果需要使用随机访问迭代器,那么请使用vector、deque和string。
- 如果考虑元素的查找速度,就要考虑哈希容器、排序的vector和标准关联容器。
- 如果不想让容器内部使用引用计数,就要避免使用string。
- 如果对插入和删除操作,需要事务语义。就是说,在插入和删除失败时,你需要回滚能力,那么请选择基于节点的的容器。
- 使用基于节点的容器可以对这类容器的插入和删除操作从来不会使迭代器、指针和引用变为无效。
- 如果序列容器的迭代器是随机访问类型,而且只要没有删除操作发生,