最最基础的 STL 用法死记硬背下来**,不然你看任何题解都像看天书。
我现在的情况就是:
算法思路能懂,但 C++ 容器怎么用完全没概念,所以觉得别人代码很玄乎。
不用系统学 STL 全书,只学刷题刚需的那一点点就够了,
一、你只需要掌握 4 个东西
刷题 99% 只用这 4 个:
vector(动态数组)queue(队列,BFS 专用)stack(栈,DFS 非递归专用)unordered_map(哈希表,记录值用)
下面每个只教最核心、必须会的用法,多一个都不讲。
二、vector 必须会的 6 个操作
cpp
vector<int> v;
- 尾部添加
cpp
v.push_back(1);
- 访问元素(像数组一样)
cpp
int x = v[0];
- 看大小
cpp
int sz = v.size();
- 判断空
cpp
if (v.empty()) { ... }
- 清空
cpp
v.clear();
- 遍历
cpp
for (int i = 0; i < v.size(); i++)
cout << v[i];
就这些,没了。
三、queue 必须会的 5 个操作(你那道题全靠它)
cpp
queue<int> q;
- 入队(放尾巴)
cpp
q.push(1);
- 看队头(最关键)
cpp
int front = q.front();
- 删除队头
cpp
q.pop();
- 判断空
cpp
while (!q.empty()) { ... }
- 大小
cpp
q.size();
固定句式(背下来)
cpp
while (!q.empty()) {
auto now = q.front();
q.pop();
// 处理 now
q.push(子元素);
}
你那道题的 front() pop() 就是这个固定句式,不是技巧,是模板。
四、stack 必须会的 5 个操作
cpp
stack<int> st;
- 入栈
cpp
st.push(1);
- 看栈顶
cpp
int top = st.top();
- 删除栈顶
cpp
st.pop();
- 判空
cpp
st.empty();
- 大小
cpp
st.size();
五、unordered_map 必须会的 3 个操作
cpp
unordered_map<int, int> mp;
- 存值
cpp
mp[key] = value;
- 取值
cpp
int val = mp[key];
- 判断有没有这个 key
cpp
if (mp.count(key)) { ... }
你那道题就是用它存「深度 → 最右节点值」。
六、你现在的核心问题一句话说清
你不是不会算法,
是没见过 STL 的固定写法,所以觉得别人代码很巧妙。
其实:
- BFS = queue + front + pop
- DFS非递归 = stack + top + pop
- 存结果 = vector
- 快速查表 = unordered_map
所有算法题解,都是这几句拼起来的。
这些都是刷算法中最基础的一些操作,掌握之后刷题目的时候才不会懵逼.,有时候其实算法里涉及到的都是一些基础的库函数.