容器一般分为序列容器(Sequence containers)和关联容器(Associative containers)。
序列容器:每个元素均有固定位置,元素排列顺序和元素值无关,取决于元素的插入时机和地点。STL序列容器包括vector(向量), list(列表), deque(双端队列)。
关联容器:元素位置取决于特定的排序准则及元素值,与元素的插入顺序无关。STL关联容器包括map(映射),set(集合),multimap(多重映射),multiset(多重集合)。
STL除了序列容器和关联容器外,还提供了容器适配器。容器适配器根据基本容器实现,包括stack(栈),queue(队列),priority_queue(优先级队列)。一般来说,stack和queue基于deque实现,priority_queue基于vector实现。
容器的特点:
1.容器类自动申请和释放内存,无需new和delete操作;
2.vector,deque,map支持下标访问,注意list不支持下标访问;特别注意,如果vector和deque若没有预先指定大小,不能用下标法插入元素。
3.只有序列容器可以在初始化时指定容器大小,关联容器不行。
4.使用迭代器访问容器时,关联容器不支持it+n操作,仅支持it++操作。
容器的使用:
1、如果需要高效的随机存取,不在乎插入和删除的效率,使用 vector。
2、如果需要大量的插入和删除元素,不关心随机存取的效率,使用 list。
3、如果需要随机存取,并且关心两端数据的插入和删除效率,使用 deque。
4、如果打算存储数据字典,并且要求方便地根据 key 找到 value,一对一的情况使用 map,一对多的情况使用 multimap。
5、如果打算查找一个元素是否存在于某集合中,唯一存在的情况使用 set,不唯一存在的情况使用 multiset。