c++竞赛常用函数

下面这份清单整理了 30 个 C++ 竞赛高频函数,每个都给出「所在头文件」「一句话作用」「原型」「常用写法 / 注意点」四个维度,赛前 10 min 扫一遍即可快速回忆。


一、算法头文件 <algorithm>

# 函数 一句话作用 原型 / 示例
1 sort 区间排序 sort(a, a+n); 默认升序
2 stable_sort 稳定排序 stable_sort(v.begin(), v.end());
3 partial_sort 部分排序 partial_sort(a, a+k, a+n); 前 k 小
4 nth_element 选第 k 小 nth_element(a, a+k, a+n); O(n)
5 binary_search 二分存在性 bool ok=binary_search(a, a+n, x);
6 lower_bound ≥x 首个位置 int p=lower_bound(a, a+n, x)-a;
7 upper_bound >x 首个位置 int p=upper_bound(a, a+n, x)-a;
8 max_element 最大元素迭代器 auto it=max_element(a, a+n);
9 min_element 最小元素迭代器 auto it=min_element(a, a+n);
10 minmax_element 一次求最大最小 auto [mn,mx]=minmax_element(a, a+n);
11 reverse 区间反转 reverse(s.begin(), s.end());
12 rotate 循环左移 rotate(a, a+k, a+n); 把 k 提最前
13 next_permutation 下一个字典序 while(next_permutation(a, a+n));
14 prev_permutation 上一个字典序 同上,反方向
15 unique 去重(先排序) int m=unique(a, a+n)-a;
16 merge 归并两个有序区间 merge(a, a+n1, b, b+n2, c);
17 inplace_merge 就地归并 inplace_merge(a, a+m, a+n);
18 count 计数等于 int c=count(a, a+n, val);
19 count_if 条件计数 count_if(first, last, pred);
20 find 线性查找 auto it=find(a, a+n, val);
21 find_if 条件查找 find_if(first, last, pred);
22 equal 两区间相等 bool ok=equal(a, a+n, b);
23 swap 交换两对象 swap(x, y);
24 fill 区间赋相同值 fill(a, a+n, 0);
25 iota 递增赋值 iota(a, a+n, start); C++11

二、数值头文件 <numeric>

# 函数 一句话作用 原型 / 示例
26 accumulate 求和 / 自定义累积 long long s=accumulate(a, a+n, 0LL);
27 gcd 最大公约数 int g=gcd(a, b); C++17
28 lcm 最小公倍数 int l=lcm(a, b); C++17
29 inner_product 内积 / 自定义 inner_product(a, a+n, b, init);

三、字符串 / 字符处理

# 函数 一句话作用 原型 / 示例
30 to_string 数值转 string string s=to_string(1234);
31 stoi / stol / stoll string 转整数 int x=stoi(s);
32 isdigit 字符是否数字 if(isdigit(ch)) ... 头文件 <cctype>
33 isalpha 字符是否字母 同上
34 isalnum 字母或数字 同上
35 tolower / toupper 大小写转换 putchar(tolower(ch));

四、数学函数 <cmath>(选 5 个最常用)

# 函数 一句话作用 原型 / 示例
36 abs / labs / llabs 整数绝对值 long long x=llabs(a);
37 fabs 浮点绝对值 double x=fabs(-3.14);
38 sqrt 平方根 int r=(int)sqrt(n); 注意强转
39 pow 幂运算 double p=pow(x, 3.0); 浮点版本
40 ceil / floor / round 上 / 下 / 四舍五入 int c=ceil(2.3); → 3

五、内存与容器小工具

# 函数 一句话作用 原型 / 示例
41 memset 按字节填充 memset(a, 0, sizeof a); 仅 0 / -1 安全
42 memcpy 块拷贝 memcpy(dst, src, n*sizeof(T));
43 __builtin_popcount int 二进制 1 个数 int c=__builtin_popcount(x); GCC
44 __builtin_clz 前导 0 个数 int lz=__builtin_clz(x); 返回 0~31
45 __lg 向下取 log2 int k=__lg(n); 等价于 31-__builtin_clz(n)

使用小贴士

  1. 所有 <algorithm> 函数都接受「半开区间」[first, last)。

  2. 自定义排序 / 比较器可用 lambda:
    sort(a, a+n, [](int x, int y){ return x > y; });

  3. 整型取绝对值用 std::abs 会自动匹配重载;64 位请用 llabsstd::int64_t 版本。

  4. memset 按字节赋值,只能安全置 0 或 -1(全 0xFF),不要用于浮点或 vector。

  5. 若比赛环境支持 C++20,可用 std::popcountstd::bit_ceil 等替代内置函数,提高移植性。

把这份清单打印/手抄一份,赛前 5 min 翻一遍,基本可覆盖 90% 以上常见需求。祝 AC 愉快!

相关推荐
wydaicls3 小时前
了解一下kernel6.12中cpu_util_cfs_boost函数的逻辑
linux·开发语言
Violet_YSWY3 小时前
final是干嘛的
java·开发语言
RickyWasYoung3 小时前
【matlab】字符串数组 转 double
android·java·javascript
lang201509283 小时前
Spring OXM:轻松实现Java-XML互转
xml·java·spring
Lisonseekpan4 小时前
为什么要避免使用 `SELECT *`?
java·数据库·后端·sql·mysql·oracle
一只小透明啊啊啊啊4 小时前
Java的中间件
java·开发语言·中间件
Wilson Chen4 小时前
深入理解 MySQL 事务与锁机制:从 ACID 到 Next-Key Lock 的实证之旅
java·数据库·mysql
学编程就要猛4 小时前
数据结构初阶:Java中的ArrayList
java·开发语言·数据结构
JH30734 小时前
10分钟理解泛型的通配符(extends, super, ?)
java·开发语言·windows