c++竞赛常用函数

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


一、算法头文件 <algorithm>

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

二、数值头文件 <numeric>

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

三、字符串 / 字符处理

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

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

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

五、内存与容器小工具

#函数一句话作用原型 / 示例
41memset按字节填充memset(a, 0, sizeof a); 仅 0 / -1 安全
42memcpy块拷贝memcpy(dst, src, n*sizeof(T));
43__builtin_popcountint 二进制 1 个数int c=__builtin_popcount(x); GCC
44__builtin_clz前导 0 个数int lz=__builtin_clz(x); 返回 0~31
45__lg向下取 log2int 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 愉快!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值