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 愉快!

相关推荐
虫小宝3 分钟前
查券返利机器人的异步任务调度:Java XXL-Job+Redis实现海量查券请求的分布式任务分发
java·redis·分布式
.清和.9 分钟前
【js】Javascript事件循环机制
开发语言·javascript·ecmascript
Mr_Xuhhh14 分钟前
C语言字符串与内存操作函数模拟实现详解
java·linux·算法
瑞雪兆丰年兮14 分钟前
[从0开始学Java|第十一天]ArrayList
java·开发语言
黄筱筱筱筱筱筱筱16 分钟前
第三次Python练习题
开发语言·python
夜郎king18 分钟前
基于 Java 实现数九天精准计算:从节气算法到工程化落地
java·开发语言
新缸中之脑20 分钟前
Nanobot:轻量级OpenClaw
java·运维·网络
心柠20 分钟前
原型和原型链
开发语言·javascript·ecmascript
悟能不能悟24 分钟前
java.sql.SQLSyntaxErrorException: ORA-01031: insufficient privileges
java·开发语言
马猴烧酒.25 分钟前
【DDD重构|第十三天】DDD 领域驱动设计详解+实战
java·jvm·ide·重构·tomcat·maven·团队开发