C++ STL 常用容器入门
STL(Standard Template Library)是 C++ 标准库的核心组成部分,提供了多种高效的数据结构。对于初学者来说,理解不同容器的适用场景和底层机制至关重要。本文将重点讲解 vector、pair、string、队列、栈以及各类集合与映射容器。
vector:动态数组
vector 是最常用的变长数组。它的底层实现采用了'倍增思想':当空间不足时,系统会重新分配更大的内存(通常是原容量的两倍),并将旧数据拷贝过去。这种策略虽然涉及内存拷贝,但能显著减少频繁申请小空间的开销。简单来说,申请一次大空间比申请一千次小空间要快得多。
注意:vector 支持字典序比较运算,可以直接用于排序。
常用操作
size(): 获取元素个数。empty(): 判断是否为空。clear(): 清空内容。push_back()/pop_back(): 尾部增删。front()/back(): 访问首尾元素。begin()/end(): 迭代器遍历。[]: 下标访问。
pair:二元组
pair 可以看作包含两个变量的结构体,常用于存储键值对或需要同时处理两个属性的场景。
- 定义:
pair<int, int> p; - 排序: 默认按字典序,优先比较
first,若相同再比较second。 - 嵌套: 如需更多属性,可嵌套使用,如
pair<int, pair<int, int>>。
string:字符串封装
C++ 将字符串进行了对象化封装,方便操作。
size()/length(): 获取长度。substr(起始,长度): 截取子串。c_str(): 获取 C 风格字符串指针。
序列容器:队列、栈、双端队列
queue & priority_queue
queue 遵循先进先出(FIFO)。priority_queue 基于堆实现,默认为大根堆。
- 构造小根堆: 可使用
greater<int>作为比较函数,或在 push 时插入负值。 - 常用函数:
push(),top(),pop()。
stack
栈遵循后进先出(LIFO)。
- 常用函数:
push(),top(),pop()。
deque
双端队列,功能类似加强版 vector,支持两端插入删除。由于性能开销较大,日常使用频率略低于 vector。
关联容器:Set 与 Map
set / multiset
基于红黑树实现,自动维护有序序列。
- 特点:
set不允许重复元素,multiset允许。 - : 大部分操作为 O(log n)。


