# CSP信奥赛C++常用系统函数汇总
## 一、输入输出函数
### 1. cin / cout(`<iostream>`)
```cpp
int x;
cin >> x; // 输入
cout << x << endl;// 输出
优化:ios::sync_with_stdio(false);
可提升速度
2. scanf() / printf()(<cstdio>
)
int x;
scanf("%d", &x);
printf("%d\n", x);
二、数学函数(<cmath>
)
函数 |
功能 |
示例 |
sqrt(x) |
平方根 |
sqrt(9.0) → 3.0 |
pow(a, b) |
a的b次方 |
pow(2,3) → 8.0 |
abs(x) |
整型绝对值 |
abs(-5) → 5 |
fabs(x) |
浮点型绝对值 |
fabs(-3.14) → 3.14 |
ceil(x) |
向上取整 |
ceil(2.3) → 3.0 |
floor(x) |
向下取整 |
floor(2.9) → 2.0 |
round(x) |
四舍五入 |
round(2.5) → 3.0 |
__gcd(a, b) |
最大公约数 |
__gcd(12,18) → 6 |
三、字符串处理
1. C++字符串(<string>
)
方法/函数 |
功能 |
示例 |
stoi(str) |
字符串转整数 |
stoi("123") → 123 |
substr(pos, len) |
截取子串 |
"Hello".substr(1,3) → "ell" |
find(str) |
查找子串位置 |
"abcde".find("cd") → 2 |
str.length() |
获取字符串长度 |
"test".length() → 4 |
2. C风格字符串(<cstring>
)
函数 |
功能 |
示例 |
strlen(s) |
字符串长度 |
strlen("abc") → 3 |
strcmp(a, b) |
字符串比较 |
strcmp("a", "b") → 负数 |
strcpy(dest, src) |
复制字符串 |
strcpy(buf, "hello") |
四、STL算法(<algorithm>
)
函数 |
功能 |
示例 |
sort(begin, end) |
快速排序 |
sort(arr, arr+5); |
swap(a, b) |
交换变量 |
swap(x, y); |
reverse(begin, end) |
反转序列 |
reverse(s.begin(), s.end()); |
max(a, b) / min(a, b) |
最值 |
max(3,5) → 5 |
next_permutation(...) |
生成下一个排列 |
next_permutation(arr, arr+3); |
五、容器操作
1. vector(<vector>
)
vector<int> v;
v.push_back(10); // 添加元素
v.pop_back(); // 删除末尾元素
v.size(); // 获取元素个数
2. queue(<queue>
)
queue<int> q;
q.push(10); // 入队
q.pop(); // 出队
q.front(); // 队首元素
3. stack(<stack>
)
stack<int> s;
s.push(10); // 压栈
s.pop(); // 弹栈
s.top(); // 栈顶元素
六、其他实用函数
函数/方法 |
头文件 |
功能 |
示例 |
memset(arr, val, size) |
|
内存初始化(按字节) |
memset(arr, 0, sizeof(arr)); |
tolower(c) / toupper(c) |
|
字符大小写转换 |
toupper('a') → 'A' |
clock() |
|
获取程序运行时间(ms) |
clock() / CLOCKS_PER_SEC |
七、完整汇总表格
分类 |
函数/方法 |
功能 |
头文件 |
示例 |
输入输出 |
cin / cout |
标准输入输出 |
|
cin >> x; cout << x; |
scanf() / printf() |
格式化输入输出 |
|
scanf("%d", &x); |
|
数学函数 |
sqrt(x) |
平方根 |
|
sqrt(9.0) → 3.0 |
pow(a, b) |
幂运算 |
|
pow(2,3) → 8.0 |
|
__gcd(a, b) |
最大公约数 |
|
__gcd(12,18) → 6 |
|
字符串处理 |
stoi(str) |
字符串转整数 |
|
stoi("123") → 123 |
str.substr(pos, len) |
截取子串 |
|
"abcde".substr(1,3) → "bcd" |
|
strcmp(a, b) |
字符串比较 |
|
strcmp("a", "b") → 负数 |
|
STL算法 |
sort(begin, end) |
快速排序 |
|
sort(v.begin(), v.end()); |
reverse(begin, end) |
反转序列 |
|
reverse(s.begin(), s.end()); |
|
容器操作 |
vector::push_back() |
添加元素 |
|
v.push_back(10); |
queue::front() |
获取队首元素 |
|
q.front(); |
|
其他 |
memset(arr, val, size) |
内存初始化 |
|
memset(arr, 0, sizeof(arr)); |
tolower(c) |
转小写字符 |
|
tolower('A') → 'a' |
注意事项
- 浮点精度:
pow(2,3)
返回double
类型,整数运算建议手动计算 - 排序自定义:
sort()
可通过自定义比较函数实现复杂排序 - 内存安全:
memset
的第二个参数是按字节赋值,仅适合初始化为 0 或 -1 - 竞赛优化:关闭流同步
ios::sync_with_stdio(false);
可提升输入输出速度