算法竞赛中常用的数据处理库函数
以下是算法竞赛(如蓝桥杯、牛客网)中常用的 C++11 标准数学库函数,按函数名分类整理,包含使用方式、头文件及功能说明:
一、基础数学运算
函数名 | 使用方式及返回值 | 头文件 | 功能描述 |
---|---|---|---|
std::abs(x) |
double abs(double x); (支持整型/浮点型) |
<cmath> |
返回 x 的绝对值 |
std::sqrt(x) |
double sqrt(double x); |
<cmath> |
返回 x 的平方根(需 x ≥ 0 ) |
std::pow(x, y) |
double pow(double x, double y); |
<cmath> |
返回 x^y (结果为浮点型) |
std::hypot(x, y) |
double hypot(double x, double y); |
<cmath> |
返回 √(x² + y²) (两点间欧氏距离) |
二、指数与对数函数
函数名 | 使用方式及返回值 | 头文件 | 功能描述 |
---|---|---|---|
std::exp(x) |
double exp(double x); |
<cmath> |
返回 e^x (自然指数) |
std::log(x) |
double log(double x); |
<cmath> |
返回 ln(x) (自然对数,需 x > 0 ) |
std::log10(x) |
double log10(double x); |
<cmath> |
返回 log₁₀(x) (以 10 为底) |
std::log2(x) |
double log2(double x); |
<cmath> |
返回 log₂(x) (以 2 为底,C++11 新增) |
三、三角函数(参数为弧度)
函数名 | 使用方式及返回值 | 头文件 | 功能描述 |
---|---|---|---|
std::sin(x) |
double sin(double x); |
<cmath> |
返回 x 的正弦值 |
std::cos(x) |
double cos(double x); |
<cmath> |
返回 x 的余弦值 |
std::tan(x) |
double tan(double x); |
<cmath> |
返回 x 的正切值 |
std::atan2(y, x) |
double atan2(double y, double x); |
<cmath> |
返回 y/x 的反正切(四象限,弧度值) |
四、取整与舍入函数
函数名 | 使用方式及返回值 | 头文件 | 功能描述 |
---|---|---|---|
std::ceil(x) |
double ceil(double x); |
<cmath> |
返回不小于 x 的最小整数(向上取整) |
std::floor(x) |
double floor(double x); |
<cmath> |
返回不大于 x 的最大整数(向下取整) |
std::round(x) |
double round(double x); |
<cmath> |
返回最接近 x 的整数(四舍五入,C++11 新增) |
std::trunc(x) |
double trunc(double x); |
<cmath> |
截断小数部分,返回整数部分(向零取整)这个应该可以直接用强制类型转换 |
五、其他实用函数
函数名 | 使用方式及返回值 | 头文件 | 功能描述 |
---|---|---|---|
std::cbrt(x) |
double cbrt(double x); |
<cmath> |
返回 x 的立方根(C++11 新增) |
std::fmod(x, y) |
double fmod(double x, double y); |
<cmath> |
返回 x/y 的浮点余数(符号与 x 相同) |
std::remainder(x, y) |
double remainder(double x, double y); |
<cmath> |
返回 IEEE 余数(符号与 x/y 的商相同) |
std::max(a, b) |
T max(T a, T b); (T 为可比较类型) |
<algorithm> 注意头文件 |
返回 a 和 b 中的较大值 |
std::min(a, b) |
T min(T a, T b); (T 为可比较类型) |
<algorithm> 注意头文件 |
返回 a 和 b 中的较小值 |
六、注意事项
-
数据类型一致性:
std::abs
支持多种类型(如int
,double
),但需确保参数类型正确。std::pow
返回浮点数,整型运算需显式转换:(int)pow(2, 3)
。
-
C++11 特有函数:
std::log2
,std::round
,std::cbrt
等需确认评测环境支持 C++11。
-
性能优化:
- 避免在循环中频繁调用
std::pow
,手写快速幂更高效。 - 优先用
std::hypot
而非sqrt(x*x + y*y)
(避免溢出)。
- 避免在循环中频繁调用
-
非标准函数:
- 如
__gcd
(GCC 扩展)可能不可移植,建议手写欧几里得算法。
- 如