C++ STL 常用容器核心用法解析
Vector:动态数组与倍增思想
Vector 是支持比较运算的序列式容器,底层为连续内存空间。在初始化时需注意其扩容机制:
倍增策略 系统分配内存时,开销主要取决于申请次数而非单次大小。申请一个大小为 1000 的数组与申请 1000 次大小为 1 的数组,时间成本相差巨大。因此,变长数组应尽量减少重新分配的次数。
当 Vector 空间不足时,它会采用倍增策略(通常容量翻倍)重新申请内存并拷贝数据。这使得插入操作的均摊时间复杂度为 O(1)。
常用函数
size(): 返回元素个数empty(): 判断是否为空clear(): 清空内容front()/back(): 访问首尾元素push_back()/pop_back(): 尾部增删begin()/end(): 迭代器范围[]: 下标访问,支持字典序比较
遍历方式 推荐使用基于范围的 for 循环或迭代器,避免直接操作下标导致性能损耗。
Pair:二元组结构
Pair 存储一个二元组,可视为包含两个变量的结构体,内部预定义了比较函数。
- 定义:
std::pair<int, int> p; - 特性: 支持比较运算,排序时按字典序进行。以
first为第一关键字,second为第二关键字。 - 嵌套使用: 若需处理三个属性,可使用嵌套 Pair,如
pair<int, pair<int, int>> p; - 应用场景: 当一个对象有两种不同属性且需要按特定属性排序时,Pair 非常实用。
String:字符串封装
C++ 将字符串进行了封装,提供了丰富的操作接口。
size()/length(): 返回长度substr(起始下标,子串长度): 获取子串c_str(): 返回字符数组地址,用于 C 风格接口调用
队列与栈
Queue 队列
遵循先进先出 (FIFO) 原则。
push(): 队尾插入pop(): 弹出队头front()/back(): 访问首尾
Stack 栈
遵循后进先出 (LIFO) 原则。
push(): 入栈pop(): 出栈top(): 查看栈顶
Priority Queue 优先队列
底层基于堆实现,默认为大根堆。
如何构造小根堆
- 在 push 时直接插入负值(针对数值类型)。
- 定义模板参数时指定比较器:
priority_queue<int, vector<int>, greater<int>> q;


