STL(Standard Template Library)是C++的标准模板库。
STL包含6个部分。
- 容器(container)
- 迭代器(iterator)
- 空间配置器(allocator)
- 配接器(adapter)
- 算法(algorithm)
- 仿函数(functor)
下面主要介绍常用容器和常用算法。
目录
一、容器
STL包括顺序式容器和关联式容器。
1、顺序式容器
顺序式容器包括vector、list、deque、queue、priority_queue、stack等,它们的特点如下:
1.1 vector
动态数组,从末尾能快速插入与删除,直接访问任何元素。
数组是基本的数据结构,有静态数组和动态数组两种类型。在算法竞赛中,编码的惯例是:若空间足够,能用静态数组就用静态数组,而不用指针管理动态数组;如果空间紧张,用vector。
1.2 stack
栈,先进后出。
应用:按位输出数字
1.3 list
双链表,从任何地方快速插入与删除。
应用(结合结构体):C语言读者管理系统
ps: list 和 vector的应用场景不同
(1) vector: 插入和删除少,随机访问元素频繁
(2) list: 插入和删除频繁,随机访问较少
1.4 deque
双向队列,从前面或后面快速插入与删除,直接访问任何元素。
应用:蓝桥杯 算法提高 奥运会开幕式 deque
1.5 priority_queue
优先队列,最高优先级元素总是第一个出列。
应用:BFS(广度优先搜索)、迪杰斯特拉算法
2、关联式容器
关联式容器包括set、multiset、map、multimap等
2.1 set
集合,快速查找,不允许重复值
应用:蓝桥杯 算法提高 P0603 统计不同单词个数
2.2 multiset
在set的基础上允许重复值
2.3 map
一对多映射,基于关键值查找,不允许重复值。实现从键(key)到值(value)的映射。map效率高的原因是它用平衡二叉搜索树来存储和访问。
应用:
2.4 multimap
在map基础上允许重复值。