C++ 标准库常用函数速查表
1. 常用数学函数
头文件:<cmath>(部分函数还需 <algorithm> 或 <cstdlib>)
| 函数 |
作用 |
示例 |
备注 |
abs |
求绝对值 |
abs(-8) |
整型题非常常见 |
sqrt |
求平方根 |
sqrt(25) |
返回浮点数 |
pow |
求幂 |
pow(2, 10) |
注意浮点误差 |
floor |
向下取整 |
floor(3.9) |
结果是浮点数形式 |
ceil |
向上取整 |
ceil(3.1) |
结果是浮点数形式 |
round |
四舍五入 |
round(3.5) |
也常见于输出处理 |
max |
取较大值 |
max(a, b) |
竞赛里极高频 |
min |
取较小值 |
min(a, b) |
竞赛里极高频 |
swap |
交换两个变量 |
swap(a, b) |
排序、模拟、贪心常用 |
2. 字符判断函数
头文件:<cctype>
| 函数 |
作用 |
示例 |
备注 |
isdigit |
判断是否为数字字符 |
isdigit('7') |
常用于手写解析数字 |
isalpha |
判断是否为字母 |
isalpha('A') |
大小写字母都算 |
isalnum |
判断是否为字母或数字 |
isalnum('9') |
字母数字混合串常用 |
islower |
判断是否为小写字母 |
islower('a') |
只认小写 |
isupper |
判断是否为大写字母 |
isupper('Z') |
只认大写 |
isspace |
判断是否为空白字符 |
isspace(' ') |
空格、换行、制表符都算 |
ispunct |
判断是否为标点符号 |
ispunct('?') |
处理文本题时有用 |
3. 字符转换函数
头文件:<cctype>
| 函数 |
作用 |
示例 |
备注 |
tolower |
把大写字母转成小写 |
char c = tolower('A'); |
得到 'a' |
toupper |
把小写字母转成大写 |
char c = toupper('b'); |
得到 'B' |
4. 常用算法函数
头文件:<algorithm>
| 函数 |
作用 |
示例 |
备注 |
sort(a.begin(), a.end()) |
对区间从小到大排序 |
sort(a.begin(), a.end()); |
竞赛中最常用的排序函数 |
unique(a.begin(), a.end()) |
把相邻重复元素移到后面 |
a.erase(unique(a.begin(), a.end()), a.end()); |
通常先 sort 再配合去重 |
reverse(a.begin(), a.end()) |
反转区间元素顺序 |
reverse(a.begin(), a.end()); |
字符串、数组、vector 都常用 |
find(a.begin(), a.end(), x) |
在线性区间中查找某个值 |
auto it = find(a.begin(), a.end(), 7); |
找不到会返回区间尾迭代器 |
count(a.begin(), a.end(), x) |
统计区间里某个值出现了几次 |
int cnt = count(a.begin(), a.end(), 7); |
字符串、数组、vector 都能用 |
binary_search(a.begin(), a.end(), x) |
判断有序区间里是否存在某值 |
bool ok = binary_search(a.begin(), a.end(), 7); |
使用前区间必须有序 |
lower_bound(a.begin(), a.end(), x) |
找第一个大于等于 x 的位置 |
auto it = lower_bound(a.begin(), a.end(), 7); |
常用于二分答案和离散化 |
upper_bound(a.begin(), a.end(), x) |
找第一个大于 x 的位置 |
auto it = upper_bound(a.begin(), a.end(), 7); |
常用于统计某值出现范围 |
5. 字符串与数字转换
头文件:<string>
| 函数 |
作用 |
示例 |
备注 |
stoi |
把 string 转成 int |
int x = stoi("123"); |
字符串里通常应是合法整数 |
stol |
把 string 转成 long |
long x = stol("123456"); |
范围比 int 大 |
stoll |
把 string 转成 long long |
long long x = stoll("123456789"); |
大整数题里更常用 |
stof |
把 string 转成 float |
float x = stof("3.14"); |
浮点数精度较低 |
stod |
把 string 转成 double |
double x = stod("3.14159"); |
浮点运算更常用它 |
to_string |
把数字转成字符串 |
string s = to_string(2026); |
拼接输出时很方便 |
6. 字符串常用成员函数
头文件:<string>
| 写法 |
作用 |
示例 |
备注 |
s.size() |
返回字符串长度 |
int n = s.size(); |
很常用 |
s.substr(pos, len) |
截取子串 |
s.substr(2, 3) |
从下标 pos 开始 |
s.find(x) |
查找子串或字符第一次出现位置 |
s.find("ab") |
找不到返回 string::npos |
s.push_back(ch) |
在末尾加一个字符 |
s.push_back('x'); |
构造字符串时方便 |
s.pop_back() |
删除最后一个字符 |
s.pop_back(); |
模拟栈思想时常用 |
reverse(s.begin(), s.end()) |
反转字符串 |
reverse(s.begin(), s.end()); |
需要 <algorithm> |
7. vector 容器
头文件:<vector>
| 函数 | 作用 | 示例 | 备注 |
vector<int> a | 创建整型动态数组 | vector<int> a; | 元素连续存储 |
push_back(x) | 在末尾添加元素 | a.push_back(7); | 最常用的插入方式 |
pop_back() | 删除末尾元素 | a.pop_back(); | 使用前确保容器非空 |
a[i] | 访问下标为 i 的元素 | cout << a[0]; | 下标从 0 开始 |
size() | 返回元素个数 | a.size() | 返回无符号整数类型 |
empty() | 判断是否为空 | if (a.empty()) | 为空返回 true |
clear() | 清空所有元素 | a.clear(); | 清空后 size 为 0 |
8. queue 队列
头文件:<queue>
| 函数 | 作用 | 示例 | 备注 |
push(x) | 从队尾加入元素 | q.push(7); | 先进先出 |
pop() | 删除队首元素 | q.pop(); | 不返回被删除的值 |
front() | 查看队首元素 | q.front() | 使用前确保非空 |
back() | 查看队尾元素 | q.back() | 使用前确保非空 |
size() | 返回元素个数 | q.size() | 常用于循环处理 |
empty() | 判断队列是否为空 | while (!q.empty()) | 广度优先搜索常用 |
9. stack 栈
头文件:<stack>
| 函数 | 作用 | 示例 | 备注 |
push(x) | 向栈顶加入元素 | s.push(7); | 后进先出 |
pop() | 删除栈顶元素 | s.pop(); | 不返回被删除的值 |
top() | 查看栈顶元素 | s.top() | 使用前确保非空 |
size() | 返回元素个数 | s.size() | 常用于模拟栈 |
empty() | 判断栈是否为空 | while (!s.empty()) | 括号匹配常用 |
10. map 映射
头文件:<map>
| 函数 | 作用 | 示例 | 备注 |
mp[key] | 访问或修改键对应的值 | mp["Tom"] = 90; | 键不存在时会自动创建 |
insert({k, v}) | 插入键值对 | mp.insert({1, 100}); | 键重复时不会覆盖原值 |
find(key) | 查找键 | mp.find(1) | 找不到返回 end() |
count(key) | 判断键是否存在 | mp.count(1) | map 中结果为 0 或 1 |
erase(key) | 按键删除元素 | mp.erase(1); | 键不存在时不报错 |
size() | 返回键值对数量 | mp.size() | 按键自动排序 |
11. set 集合
头文件:<set>
| 函数 | 作用 | 示例 | 备注 |
insert(x) | 插入元素 | st.insert(7); | 重复元素只保留一个 |
find(x) | 查找元素 | st.find(7) | 找不到返回 end() |
count(x) | 判断元素是否存在 | st.count(7) | set 中结果为 0 或 1 |
erase(x) | 删除指定元素 | st.erase(7); | 不存在时不报错 |
size() | 返回元素个数 | st.size() | 元素自动从小到大排列 |
empty() | 判断集合是否为空 | st.empty() | 为空返回 true |