C++ STL 常用容器详解
前言
C++ 标准模板库(STL)提供了丰富的容器类型,合理使用它们能显著提升开发效率。本文将系统梳理 vector、pair、string、队列、栈、集合及映射等核心容器的特性与用法,重点解析动态扩容机制、堆实现原理以及不同容器在时间复杂度上的差异。
Vector:变长数组与倍增思想
vector 是支持比较运算的序列容器,按字典序大小排序。其底层采用连续内存空间存储元素。
内存分配策略
系统为程序分配空间时,所需时间主要与申请次数有关,而非空间大小。例如,申请一个大小为 1000 的数组,比申请 1000 个大小为 1 的数组快得多。因此,使用变长数组时应尽量减少空间申请的次数。
当 vector 容量不足时,通常会将长度翻倍再次申请内存。这种倍增策略保证了均摊时间复杂度为 O(1)。
常用操作
size(): 返回元素个数empty(): 判断是否为空clear(): 清空容器front()/back(): 访问首尾元素push_back()/pop_back(): 尾部插入/弹出begin()/end(): 迭代器遍历[]: 下标访问,支持比较运算
#include <vector>
#include <iostream>
using namespace std;
int main() {
vector<int> v;
v.push_back(1);
v.push_back(2);
// 访问第一个元素
cout << v.front() << endl;
return 0;
}
Pair:二元组结构
pair 可以看作有两个变量的结构体,内部已定义比较函数。它常用于存储具有两种属性的数据。
定义与取值
#include <utility>
pair<int, int> p = make_pair(1, 2);
// 或
pair<, > p{, };
first = p.first;
second = p.second;


