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