掌握 Linux 下的 C++ 容器,核心在于理解 STL 容器模型 + 熟练 Linux 开发工具链 + 结合系统级编程实践。下面给你一个由浅入深的系统学习路线,适合在 Linux 环境中真正“掌握”,而不是只会背接口。
在 Linux C++ 中,“容器”通常指:
STL 容器(最常见)
vector, deque, listmap, set, multimap, multisetunordered_map, unordered_setstack, queue, priority_queueLinux 系统级“容器”
✅ 下面重点讲 STL 容器在 Linux 下的掌握方式
| 容器 | 底层结构 | 特点 |
|---|---|---|
vector |
动态数组 | 随机访问快,插入慢 |
list |
双向链表 | 插入快,不能随机访问 |
deque |
分段数组 | 头尾快 |
map |
红黑树 | 有序 |
unordered_map |
哈希表 | 无序,平均 O(1) |
✅ 重点理解:
#include <vector>
#include <map>
#include <unordered_map>
#include <algorithm>
std::vector<int> v = {1, 2, 3};
v.push_back(4);
for (int x : v) {
std::cout << x << " ";
}
std::map<int, std::string> m;
m[1] = "hello";
std::unordered_map<int, std::string> um;
um[2] = "world";
g++ -std=c++17 -g main.cpp -o main
常用工具:
| 工具 | 用途 |
|---|---|
| g++ / clang++ | 编译 |
| gdb | 调试容器内容 |
| valgrind | 内存检查 |
| strace | 系统调用 |
| perf | 性能分析 |
✅ 会用 gdb 查看 vector / map 内容 是“掌握”的标志之一
p v
p m
p um
vector 扩容机制(capacity / size)reserve() vs resize()emplace_back() vs push_back()v.reserve(100); // 避免多次扩容
v.emplace_back(10); // 少一次拷贝
| 容器 | 插入/删除是否失效 |
|---|---|
| vector | 插入可能全部失效 |
| list | 只影响当前 |
| map | 不影响其他 |
for (auto it = v.begin(); it != v.end(); ) {
if (*it == 3)
it = v.erase(it);
else
++it;
}
std::vector<int> v = {3, 1, 4};
std::sort(v.begin(), v.end());
std::for_each(v.begin(), v.end(), [](int x){
std::cout << x << " ";
});
✅ 掌握:
<algorithm>std::bindreserveunordered_map 替代 map(除非需要有序)⚠️ STL 容器 不是线程安全的
std::mutex mtx;
std::vector<int> v;
void add(int x) {
std::lock_guard<std::mutex> lock(mtx);
v.push_back(x);
}
或:
tbb::concurrent_vectormap / vector)deque)✅ 你能回答:
vector 和 list 什么时候用?map 和 unordered_map 底层区别?unordered_map 比 map 快?你可以直接告诉我:
我可以给你定制一个 30 天 Linux C++ 容器掌握计划。