C++ 容器的核心知识
一、C++ 容器是什么?
C++ 容器(Container)是 C++ 标准库(STL)中提供的数据结构模板,可以理解为 “自带各种功能的高级数组 / 集合”,帮你快速存储、管理和操作一组数据,不用自己手动实现链表、队列、哈希表等复杂结构,极大提升开发效率。
核心特点:
- 跨平台、高性能:由标准库优化实现,比手写的数据结构更稳定高效;
- 泛型设计:支持存储任意类型(int、string、自定义类等);
- 配套算法:可直接结合 STL 算法(排序、查找、遍历)使用。
二、C++ 容器核心分类(常用)
按功能和底层实现,主要分 3 大类,新手优先掌握标★的:
| 类别 | 代表容器 | 核心特点 | 适用场景 |
|---|---|---|---|
| 序列容器 | ★vector、★list、deque | 按插入顺序存储,可重复、有序 | vector(动态数组,随机访问快);list(链表,插入删除快) |
| 关联容器 | ★map、★set、unordered_map | 自动排序 / 哈希存储,key 唯一 | map(键值对,如字典);set(去重集合);unordered_map(哈希表,查询更快) |
| 容器适配器 | ★stack、★queue | 封装基础容器,提供特定操作接口 | stack(栈,后进先出);queue(队列,先进先出) |
三、新手必学核心容器(极简用法)
1. vector(动态数组,最常用)
相当于 “可以自动扩容的数组”,随机访问(按索引取值)速度极快。
cpp
运行
#include <iostream>
#include <vector> // 必须包含头文件
using namespace std;
int main() {
vector<int> nums; // 定义存储int的vector
nums.push_back(10); // 尾部添加元素
nums.push_back(20);
nums.push_back(30);
// 遍历(3种方式,新手先学第1种)
for (int i = 0; i < nums.size(); i++) {
cout << nums[i] << " "; // 输出:10 20 30
}
nums.pop_back(); // 尾部删除元素
cout << "\n删除后大小:" << nums.size(); // 输出:2
return 0;
}
2. map(键值对容器,字典)
存储 “键 - 值” 对,键唯一且自动排序,适合按 key 查找 value。
cpp
运行
#include <iostream>
#include <map>
using namespace std;
int main() {
map<string, int> score; // 键:字符串(姓名),值:整数(分数)
score["张三"] = 90;
score["李四"] = 85;
// 遍历
for (auto& pair : score) {
cout << pair.first << ":" << pair.second << endl;
}
// 输出:李四:85 张三:90(自动按key排序)
// 查找
if (score.find("张三") != score.end()) {
cout << "张三分数:" << score["张三"]; // 输出:90
}
return 0;
}
3. stack(栈)
后进先出(LIFO),只有栈顶能操作,适合括号匹配、逆序处理等场景。
cpp
运行
#include <iostream>
#include <stack>
using namespace std;
int main() {
stack<int> s;
s.push(1); // 入栈:1
s.push(2); // 入栈:2(栈顶)
cout << "栈顶:" << s.top(); // 输出:2
s.pop(); // 出栈(删除栈顶)
cout << "\n出栈后大小:" << s.size(); // 输出:1
return 0;
}
四、新手避坑要点
- 头文件必须加:使用哪个容器,就要包含对应头文件(如
<vector>、<map>),否则编译报错; - 选择容器的原则:
- 随机访问多(按索引取值)→ vector;
- 频繁插入删除(中间位置)→ list;
- 按 key 查找 → map(有序)/unordered_map(更快);
- 先进先出 → queue,后进先出 → stack;
- 避免性能坑:vector 频繁扩容会消耗性能,可提前用
reserve(n)预留空间;unordered_map 是哈希表,查询快但无序,且需要注意哈希冲突。
总结
- C++ 容器是 STL 提供的通用数据结构,核心分序列、关联、适配器 3 类,不用手写复杂数据结构;
- 新手优先掌握 vector(动态数组)、map(键值对)、stack/queue(特殊操作),覆盖 80% 日常场景;
- 选容器的核心是看 “访问 / 插入 / 删除” 的频率,优先匹配容器的核心优势。

浙公网安备 33010602011771号