竞赛中,掌握常用算法头文件和相关方法能显著提升解题效率。以下是核心头文件及常用方法的总结:
常用算法头文件
1. <algorithm>- 算法库核心
-
sort(begin, end, cmp)- 排序(默认升序) -
stable_sort(begin, end, cmp)- 稳定排序 -
nth_element(begin, nth, end)- 部分排序 -
binary_search(begin, end, val)- 二分查找 -
lower_bound(begin, end, val)- 返回第一个≥val的位置 -
upper_bound(begin, end, val)- 返回第一个>val的位置 -
next_permutation(begin, end)- 下一个排列 -
prev_permutation(begin, end)- 上一个排列 -
max(a, b)/min(a, b)- 最值 -
swap(a, b)- 交换 -
reverse(begin, end)- 反转序列 -
unique(begin, end)- 去重(需先排序) -
count(begin, end, val)- 统计出现次数 -
find(begin, end, val)- 查找元素
2. <vector>- 动态数组
-
push_back(val)- 尾部插入 -
pop_back()- 尾部删除 -
size()- 元素个数 -
empty()- 判断是否为空 -
resize(n)- 调整大小 -
clear()- 清空 -
begin()/end()- 迭代器 -
front()/back()- 首尾元素
3. <string>- 字符串处理
-
length()/size()- 字符串长度 -
substr(pos, len)- 子串提取 -
find(str, pos)- 查找子串 -
replace(pos, len, str)- 替换 -
append(str)- 追加 -
compare(str)- 比较 -
stoi(str)/stoll(str)- 字符串转整数 -
to_string(num)- 数值转字符串
4. <cmath>- 数学函数
-
sqrt(x)- 平方根 -
pow(x, y)- 幂运算 -
abs(x)- 绝对值 -
ceil(x)- 向上取整 -
floor(x)- 向下取整 -
round(x)- 四舍五入 -
sin(x)/cos(x)/tan(x)- 三角函数 -
log(x)/log10(x)- 对数函数
5. <cstring>- C风格字符串
-
strlen(str)- 字符串长度 -
strcpy(dest, src)- 字符串复制 -
strcat(dest, src)- 字符串连接 -
strcmp(str1, str2)- 字符串比较 -
memset(ptr, val, size)- 内存设置(常用于数组初始化)
6. <queue>- 队列
-
push(val)- 入队 -
pop()- 出队 -
front()- 队首元素 -
back()- 队尾元素 -
empty()/size()- 状态查询
7. <stack>- 栈
-
push(val)- 入栈 -
pop()- 出栈 -
top()- 栈顶元素 -
empty()/size()- 状态查询
8. <set>/ <map>- 集合与映射
-
insert(val)- 插入元素 -
erase(val)- 删除元素 -
find(val)- 查找元素 -
count(val)- 统计出现次数 -
lower_bound(val)/upper_bound(val)- 边界查找 -
begin()/end()- 迭代器
9. <bits/stdc++.h>- 万能头文件
- 包含大多数C++标准库头文件,竞赛中常用以节省时间
典型应用场景
排序与查找题
-
使用
sort()进行快速排序 -
结合
lower_bound()/upper_bound()进行二分查找 -
利用
unique()处理去重问题
字符串处理题
-
substr()提取子串 -
find()定位特定字符或模式 -
stoi()/to_string()进行类型转换
数学计算题
-
pow()计算幂次 -
sqrt()处理平方根相关 -
ceil()/floor()处理取整需求
数据结构题
-
vector动态数组处理可变长度数据 -
queue/stack实现BFS/DFS -
set/map维护有序集合或键值对
性能优化技巧
-
使用
ios::sync_with_stdio(false)和cin.tie(nullptr)加速输入输出 -
优先使用
scanf()/printf()处理大量数据 -
合理选择容器:
vector连续内存访问快,list插入删除效率高 -
避免不必要的拷贝,使用引用传递大对象
掌握这些头文件和方法后,能覆盖蓝桥杯大部分算法题目。建议在实际练习中灵活组合使用,并注意各函数的时间复杂度特性。
