C 容器是标准模板库STL的核心组成部分本质上是用于存储和组织数据的通用数据结构它们被封装成模板类支持不同类型的数据存储无需你手动管理内存大部分情况下。一、容器的分类C STL 容器主要分为三大类各自有不同的适用场景容器类型代表容器核心特点序列式容器vector、list、deque元素按插入顺序排列可通过位置访问底层结构不同导致性能差异关联式容器map/set、unordered_map/unordered_set元素按特定规则排序 / 哈希组织查找效率高容器适配器stack、queue、priority_queue基于基础容器封装提供特定的访问规则如栈的后进先出二、常用容器的基本用法下面通过代码示例展示最常用容器的核心操作1. 序列式容器 - vector最常用vector是动态数组内存连续随机访问快尾部增删效率高中间增删效率低。cpp运行#include iostream #include vector // 包含vector头文件 using namespace std; int main() { // 1. 创建vector vectorint vec; // 空的int类型vector vectorint vec2(5, 10); // 初始化5个元素每个值为10 // 2. 添加元素 vec.push_back(1); // 尾部添加元素1 vec.push_back(2); vec.push_back(3); // 3. 访问元素 cout 通过下标访问 vec[0] endl; // 下标访问无越界检查 cout 通过at访问 vec.at(1) endl; // at访问有越界检查更安全 cout 第一个元素 vec.front() endl; cout 最后一个元素 vec.back() endl; // 4. 遍历元素 cout 遍历vector; for (int i 0; i vec.size(); i) { cout vec[i] ; } cout endl; // 5. 删除元素 vec.pop_back(); // 删除尾部元素 cout 删除尾部后大小 vec.size() endl; // 6. 清空容器 vec.clear(); cout 清空后是否为空 (vec.empty() ? 是 : 否) endl; return 0; }输出结果plaintext通过下标访问1 通过at访问2 第一个元素1 最后一个元素3 遍历vector1 2 3 删除尾部后大小2 清空后是否为空是2. 关联式容器 - map键值对map是有序的键值对容器键唯一底层是红黑树查找 / 插入 / 删除效率为 O (log n)。cpp运行#include iostream #include map // 包含map头文件 #include string using namespace std; int main() { // 1. 创建map键string值int mapstring, int scoreMap; // 2. 插入元素 scoreMap[张三] 90; scoreMap.insert(pairstring, int(李四, 85)); scoreMap.insert({王五, 95}); // 3. 访问元素 cout 张三的分数 scoreMap[张三] endl; // 查找不存在的键会自动插入默认值0建议用find auto it scoreMap.find(赵六); if (it ! scoreMap.end()) { cout 赵六的分数 it-second endl; } else { cout 未找到赵六的分数 endl; } // 4. 遍历map cout \n所有分数 endl; for (const auto pair : scoreMap) { // 范围for循环 cout pair.first pair.second endl; } // 5. 删除元素 scoreMap.erase(李四); cout \n删除李四后元素数量 scoreMap.size() endl; return 0; }输出结果plaintext张三的分数90 未找到赵六的分数 所有分数 李四85 王五95 张三90 删除李四后元素数量23. 容器适配器 - stack栈stack是后进先出LIFO的适配器默认基于 deque 实现只能访问栈顶元素。cpp运行#include iostream #include stack // 包含stack头文件 using namespace std; int main() { stackint s; // 入栈 s.push(10); s.push(20); s.push(30); // 访问栈顶 cout 栈顶元素 s.top() endl; // 出栈 s.pop(); cout 出栈后栈顶 s.top() endl; // 栈的大小 cout 栈的大小 s.size() endl; // 判断是否为空 cout 栈是否为空 (s.empty() ? 是 : 否) endl; return 0; }输出结果plaintext栈顶元素30 出栈后栈顶20 栈的大小2 栈是否为空否三、容器选择的核心原则如果需要随机访问按下标快速取值、尾部增删多 → 选vector如果需要频繁在中间增删→ 选list双向链表如果需要键值对存储、按键查找→ 有序选map无序且追求更快查找 → 选unordered_map如果需要去重→ 选set/unordered_set如果需要先进先出队列→ 选queue后进先出栈→ 选stack总结C 容器是 STL 的核心分为序列式、关联式、容器适配器三类适配不同的数据存储和访问场景。vector是最常用的序列式容器适合随机访问map适合键值对存储stack/queue适合特定访问规则。选择容器的核心依据是访问方式和增删操作的位置 / 频率优先选择匹配业务场景、效率更高的容器。