CCF GESP C++ 六级STL

CCF GESP C++ 六级,涉及的 STL 其实比较集中。对于六级备考,不需要把整个 STL 学完,重点掌握下面这些即可。

一、GESP C++ 六级涉及的 STL 总表

STL 主要作用 上面哪些模板会用到 六级重要程度
vector 动态数组、邻接表 DP、树、图、前缀和、背包 ★★★★★
pair 保存两个数据 带权树、排序、坐标 ★★★★☆
string 字符串处理 字符串 DP、字符串划分 ★★★★★
queue 队列 BFS ★★★★☆
stack 栈 DFS/模拟/括号等 ★★★☆☆
deque 双端队列 队列优化等 ★★☆☆☆
priority_queue 优先队列 贪心、最短路、维护最大/最小值 ★★★☆☆
set 有序集合、去重 贪心、集合问题 ★★★☆☆
map 有序键值表 统计、映射 ★★★☆☆
unordered_set 哈希集合 查重 ★★☆☆☆
unordered_map 哈希映射 计数、映射 ★★☆☆☆
sort() 排序 贪心、排序 ★★★★★
reverse() 反转 数组/字符串 ★★★☆☆
max() / min() 最大/最小值 DP、树形 DP ★★★★★
swap() 交换 排序、模拟 ★★★☆☆
abs() 绝对值 树、数学、优化 ★★★★☆
lower_bound() 二分查找 排序、贪心 ★★★☆☆
upper_bound() 二分查找 排序、贪心 ★★★☆☆

二、第一重点:vector

考频:★★★★★

这是你前面要求把树模板统一改成 vector 邻接表后,最重要的 STL。


1. 动态数组

vector<int> a;

加入元素:

a.push_back(10);
a.push_back(20);

访问:

cout << a[0];
cout << a[1];

2. 初始化大小

vector<int> a(n + 1);

例如:

vector<int> dp(n + 1);
vector<int> sz(n + 1);
vector<int> dist(n + 1);

3. 初始化并赋值

vector<int> dp(n + 1, 0);

表示:

创建 n+1 个元素
全部初始化为 0

例如:

vector<int> dist(n + 1, -1);

三、vector + 树的邻接表

考频:★★★★★

这是六级树题最值得掌握的 STL 用法。

vector<vector<int>> g(n + 1);

添加边:

g[u].push_back(v);
g[v].push_back(u);

遍历:

for (int v : g[u])
{
    if (v == fa)
        continue;

    dfs(v, u);
}

所以:

vector
  ↓
vector<vector<int>>
  ↓
邻接表
  ↓
DFS
  ↓
树形 DP

这实际上是 GESP 六级树题的一条非常重要的 STL 技术链。


四、vector + pair

考频:★★★★☆

处理带权树:

vector<vector<pair<int, int>>> g(n + 1);

例如边:

1 —— 2
  5

可以:

g[1].push_back({2, 5});
g[2].push_back({1, 5});

遍历:

for (auto [v, w] : g[u])
{
    cout << v << " " << w << endl;
}

这里:

v = 邻接点
w = 边权

五、pair

考频:★★★★☆

pair 用来保存两个相关的数据。

pair<int, int> p;

例如:

pair<int, int> p = {10, 20};

cout << p.first;
cout << p.second;

GESP 中常见用途

① 带权边

pair<int, int>

② 坐标

pair<int, int>

例如:

pair<int, int> point = {3, 5};

③ 排序

vector<pair<int, int>> a;

然后:

sort(a.begin(), a.end());

默认先比较 first,再比较 second。


六、string

考频:★★★★★

虽然前面树模板中没有使用,但是 GESP 六级近年的编程题中,字符串 DP / 字符串划分是需要重点准备的。

例如:

string s;
cin >> s;

常用操作

长度:

s.size()

访问:

s[i]

例如:

for (int i = 0; i < s.size(); i++)
{
    cout << s[i];
}

拼接:

s += "abc";

子串:

s.substr(pos, len);

六级重点

尤其需要掌握:

s[i]
s.size()
s.substr()

以及:

string s;
cin >> s;

2025.09 的“划分字符串”就是字符串 + DP 类型。相关题解将其归为字符串划分与 DP。


七、sort()

考频:★★★★★

这是六级非常重要的 STL 算法。

sort(a.begin(), a.end());

从小到大:

sort(a.begin(), a.end());

从大到小:

sort(a.begin(), a.end(), greater<int>());

自定义排序

例如:

struct Node
{
    int a;
    int b;
};

bool cmp(Node x, Node y)
{
    return x.b > y.b;
}

然后:

sort(a.begin(), a.end(), cmp);

八、max() 和 min()

考频:★★★★★

DP 中几乎必然会遇到。

例如:

dp[i] = max(dp[i], dp[j] + value);

树形 DP:

dp[u] = min(dp[u], sum);

求树的最大深度:

depth = max(depth, childDepth + 1);

九、queue

考频:★★★★☆

主要用于 BFS。

queue<int> q;

入队:

q.push(1);

取队头:

int u = q.front();

删除队头:

q.pop();

判断是否为空:

while (!q.empty())

完整 BFS:

queue<int> q;

q.push(1);
dist[1] = 0;

while (!q.empty())
{
    int u = q.front();
    q.pop();

    for (int v : g[u])
    {
        if (dist[v] != -1)
            continue;

        dist[v] = dist[u] + 1;
        q.push(v);
    }
}

十、stack

考频:★★★☆☆

栈:

stack<int> st;

入栈:

st.push(10);

查看栈顶:

st.top();

出栈:

st.pop();

判断:

st.empty();

例如:

while (!st.empty())
{
    cout << st.top() << endl;
    st.pop();
}

六级目前不建议把 stack 放在第一优先级,但应该会基本使用。


十一、priority_queue

考频:★★★☆☆

优先队列。

默认是大根堆:

priority_queue<int> q;

例如:

q.push(10);
q.push(30);
q.push(20);

cout << q.top();

输出:

30

小根堆

priority_queue<
    int,
    vector<int>,
    greater<int>
> q;

这是以后学习 Dijkstra 等算法时的重要 STL。

不过对于 GESP 六级,优先级低于 vector + sort + queue。


十二、set

考频:★★★☆☆

自动排序 + 自动去重。

set<int> s;

添加:

s.insert(10);
s.insert(5);
s.insert(10);

里面只有:

5
10

遍历:

for (int x : s)
{
    cout << x << endl;
}

十三、map

考频:★★★☆☆

键值对应关系:

map<string, int> mp;

例如统计单词:

mp["apple"]++;
mp["banana"]++;
mp["apple"]++;

得到:

apple  = 2
banana = 1

遍历:

for (auto p : mp)
{
    cout << p.first << " "
         << p.second << endl;
}

十四、unordered_map

考频:★★☆☆☆

哈希表。

unordered_map<int, int> mp;

最常见用途:

mp[x]++;

用于:

统计出现次数
快速查找
映射
posted @ 2026-10-02 14:57  kkman2000  阅读(20)  评论(0)    收藏  举报