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;
}
 

四、新手避坑要点

 
  1. 头文件必须加:使用哪个容器,就要包含对应头文件(如<vector><map>),否则编译报错;
  2. 选择容器的原则
    • 随机访问多(按索引取值)→ vector;
    • 频繁插入删除(中间位置)→ list;
    • 按 key 查找 → map(有序)/unordered_map(更快);
    • 先进先出 → queue,后进先出 → stack;
     
  3. 避免性能坑:vector 频繁扩容会消耗性能,可提前用reserve(n)预留空间;unordered_map 是哈希表,查询快但无序,且需要注意哈希冲突。
 

总结

 
  1. C++ 容器是 STL 提供的通用数据结构,核心分序列、关联、适配器 3 类,不用手写复杂数据结构;
  2. 新手优先掌握 vector(动态数组)、map(键值对)、stack/queue(特殊操作),覆盖 80% 日常场景;
  3. 选容器的核心是看 “访问 / 插入 / 删除” 的频率,优先匹配容器的核心优势。
posted @ 2026-01-10 10:02  C++大哥来也  阅读(8)  评论(0)    收藏  举报