C++ STL 常用容器入门
Vector
vector 是支持比较运算的变长数组,按字典序大小排序比较。
倍增思想: 系统为某一程序分配空间时,所需的时间基本上与空间大小无关,与申请次数有关。因此,变长数组要尽量减小申请空间的次数。当空间不够时,将长度 * 2 再次申请。
常用函数:
- size():返回元素个数
- empty():返回是否为空
- clear():清空
- front()/back():访问首尾元素
- push_back()/pop_back():尾部插入/弹出
- begin()/end():迭代器范围
- []:下标访问
遍历方式: 支持迭代器遍历及 range-based for 循环。
Pair
存储一个二元组,可看成有两个变量的结构体,内部有比较函数定义。
定义方式:
这两个数据类型放什么都行,例如 pair<int, int>。
取出元素方式:
通过 .first 和 .second 访问。
构造一个 pair:
最常用的是存储有两种不同属性的东西。需要按照一种属性来排序时,把需要排序的属性放在 first。
如果有三个属性,也可以用 pair 嵌套,如 pair<int, pair<int, int>> p。
排序规则:
支持比较运算,排序时按字典序来排,以 first 为第一关键字,以 second 为第二关键字。
String
C++ 把字符串进行了封装。
常用函数:
- size()/length():返回字符串长度
- empty():判断是否为空
- clear():清空
- substr(起始下标,子串长度):返回子串
- c_str():返回字符串所在字符数组的起始地址
Queue 队列
Priority Queue 优先队列
原理是用堆来实现的,默认是大根堆。
如何构造小根堆:
- push() 时直接插入负值。
- 定义时就直接定义为小根堆:
priority_queue<int, vector<int>, greater<int>> q;
常用函数:
- size():返回元素个数
- empty():返回是否为空
- push():插入一个元素
- top():返回堆顶元素
- pop():弹出堆顶元素
Stack 栈
常用函数:
- size():返回元素个数
- empty():返回是否为空
- push():向栈顶插入一个元素
- top():返回栈顶元素
- pop():弹出栈顶元素
Deque 双端队列
其实是一个加强版的 vector,功能很强大,但由于时间开销问题,不常用。
常用函数:
- size(), empty(), clear()
- front()/back()
- push_back()/pop_back()


