CSP信奥赛C++常用系统函数汇总
# 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);
可提升输入输出速度