前言:标准模板库 STL
这一篇是 labuladong 笔记的第 1 篇,目标是先把刷题最常用的 STL 模板整理成“能直接复制用”的最小集合。
0. 刷题环境提醒
机试常见环境是 C++11,建议先确认编译参数:
常用头文件:
1 2
| #include <bits/stdc++.h> using namespace std;
|
1. 数据结构:高频 API 清单
1.1 vector
1 2 3 4 5 6 7 8 9
| vector<int> a; vector<int> b(5, 0);
a.push_back(3); a.pop_back(); a.size(); a.empty(); sort(a.begin(), a.end()); reverse(a.begin(), a.end());
|
1.2 stack / queue / deque
1 2 3 4 5 6 7 8 9
| stack<int> st; st.push(1); st.top(); st.pop(); st.empty();
queue<int> q; q.push(1); q.front(); q.back(); q.pop();
deque<int> dq; dq.push_front(1); dq.push_back(2); dq.front(); dq.back(); dq.pop_front(); dq.pop_back();
|
1.3 unordered_map / unordered_set
1 2 3 4 5 6 7 8 9
| unordered_map<string, int> mp; mp["apple"] = 1; mp.count("apple"); mp.find("apple");
unordered_set<int> st; st.insert(10); st.count(10); st.erase(10);
|
1.4 priority_queue
1 2 3 4 5 6 7 8 9
| priority_queue<int> maxHeap;
priority_queue<int, vector<int>, greater<int>> minHeap;
minHeap.push(3); minHeap.push(1); minHeap.top();
|
2. 算法工具:algorithm / numeric
1 2 3 4 5 6 7 8
| vector<int> nums = {4, 1, 7, 2};
sort(nums.begin(), nums.end()); int mn = *min_element(nums.begin(), nums.end()); int mx = *max_element(nums.begin(), nums.end());
int s = accumulate(nums.begin(), nums.end(), 0); bool has = binary_search(nums.begin(), nums.end(), 7);
|
3. 两个必备实现
3.1 最大公约数 gcd
1 2 3 4 5 6 7 8 9
| int gcd_(int a, int b) { a = abs(a); b = abs(b); while (b != 0) { int t = b; b = a % b; a = t; } return a; }
|
3.2 最小公倍数 lcm
1 2 3 4
| int lcm_(int a, int b) { if (a == 0 || b == 0) return 0; return abs(a / gcd_(a, b) * b); }
|
4. 第一篇复盘
- 不追求一次记住全部 STL,而是先掌握“刷题高频 API”。
- 遇到不熟悉容器时,再回到这篇做速查。
- 下一篇准备写:基础:数组(静态/动态)。