基本概念
一个容器就是一些特定类型对象的集合;它可以保存其他对象或者指向其他对象的指针,还提供了一系列处理其他对象的方法;容器类自动申请和释放内存,因此无需new和delete操作。容器本质的作用是对数据进行存储,学习容器的关键是掌握各种容器的特点及其对数据的增删改查的操作方法。
容器的种类
STL容器主要分为顺序容器、关联容器、容器适配器,其中关联容器包括有序容器和无序容器。
1、顺序容器
顺序容器为成员提供了控制元素存储以及快速顺序访问元素的能力;元素顺序和元素值无关,依赖于元素添加时的次序。
- vector:可变大小数组,支持在末尾快速的插入和删除元素,支持直接访问任何元素。
- list:双向链表,支持在任何位置快速的插入和删除,不支持随机访问。
2、容器适配器
适配器是一种机制,能使某种事物的行为看起来像另外一种事物一样。适配器为顺序容器提供了不同的接口。一个适配器可以看作是:它保存一个容器,用这个容器再保存所有元素。
- stack:先进后出,栈顶加入元素,栈顶删除元素。
- queue:先进后出,队尾加入元素,队首删除元素。
- priority_queue:优先级队列,最高优先级的元素第一个出队
3、有序容器
有序容器支持高效的关键字查找和访问,各元素之间没有严格的物理上的顺序关系,默认按关键字字典顺序排序。
- map:基于关键字查找,不允许重复,所有元素是有序的。
- set:快速查找,不允许重复,所有元素是有序的。
4、无序容器
无序容器是内部采用哈希表实现的map或者set。
- unordered_map:基于关键字查找,不允许重复,所有元素是无序的。
- unordered_set:快速查找,不允许重复,所有元素是无序的。
缺省情况下默认选择 vector;若需要频繁的进行删除或者插入操作就选择 list;需要基于关键字快速访问就选择map。