c++头文件
·
输入输出
下面是两种输入输出的头文件,一般情况下用第一个就行,因为虽然c语言的输入输出更快一点,但是机试应该不会卡这个
| 头文件 | 描述 | 主要函数/对象 | 适用场景 |
|---|---|---|---|
<iostream> |
标准输入输出流(C++ 风格) | cin(输入)、cout(输出)、endl(换行刷新) | 大多数场景的输入输出(推荐优先使用) |
<cstdio> |
兼容 C 语言的标准输入输出(效率略高于<iostream>,尤其处理大量数据时) |
scanf(输入)、printf(输出)、fopen(文件) | 快速输入输出(如大量数组、数值) |
C++ 标准库(STL)
合理运用stl是很好的
完善后的C++常用数据结构头文件表
| 头文件 | 核心数据结构 | 常用操作(以示例为例) | 适用场景 |
|---|---|---|---|
<vector> |
动态数组(可自动扩容,支持随机访问) | push_back()(尾部添加)、size()(长度)、[](访问元素)、pop_back()(尾部删除)、clear()(清空) |
存储可变长度的序列(如不确定大小的数组)、作为其他容器的底层容器 |
<string> |
字符串类(替代C语言的char数组,支持便捷操作) | append()(拼接)、substr()(子串)、find()(查找)、size()(长度)、c_str()(转为C风格字符串) |
字符串处理(比char[]更安全、易用) |
<queue> |
1. 队列(先进先出FIFO) 2. 优先队列(priority_queue,默认最大堆) |
队列:push()(队尾添加)、front()(访问队首)、pop()(删除队首)、empty()(判空)优先队列: push()、top()(访问堆顶)、pop() |
队列:广度优先搜索(BFS)、任务排队 优先队列:贪心算法、Dijkstra算法、获取最大/小值 |
<stack> |
栈(先进后出LIFO) | push()(栈顶添加)、top()(访问栈顶)、pop()(删除栈顶)、empty()(判空)、size()(大小) |
深度优先搜索(DFS)、表达式求值、括号匹配、函数调用模拟 |
<map> |
有序映射(键值对,按键自动排序,基于红黑树实现,键唯一) | insert()(插入键值对)、find()(按键查找)、[](访问/修改值)、erase()(删除)、size()(大小) |
键值关联存储、需要按键排序的场景(如统计单词出现次数并排序) |
<unordered_map> |
无序映射(键值对,不排序,基于哈希表实现,查询效率更高,键唯一) | 同<map>,但无排序功能,增加reserve()(预分配空间) |
高频查询场景(查询时间O(1),优于map的O(logn))、快速键值查找 |
<set> |
有序集合(存储唯一元素,自动排序,基于红黑树实现) | insert()(添加元素)、count()(判断元素是否存在)、erase()(删除元素)、begin()(迭代器起始) |
存储不重复的有序数据(如去重、排序、范围查询) |
<unordered_set> |
无序集合(存储唯一元素,不排序,哈希实现) | 同<set>,但无排序功能,增加reserve()(预分配空间) |
快速去重、判断元素是否存在(O(1)查询)、无需排序的集合操作 |
<multimap> |
有序多重映射(键可重复,按键排序,基于红黑树) | 同<map>,但支持重复键,equal_range()(获取相同键的所有值) |
需要存储重复键的键值对场景(如一个键对应多个值) |
<multiset> |
有序多重集合(元素可重复,自动排序,基于红黑树) | 同<set>,但支持重复元素,count()(统计元素出现次数)、lower_bound()(下界)、upper_bound()(上界) |
需要存储重复元素且保持有序的场景(如统计频率、范围查询) |
<array> |
固定大小数组(编译期确定大小,支持随机访问,比原生数组更安全) | size()(大小)、[](访问元素)、data()(获取底层指针)、front()(首元素)、back()(尾元素) |
已知固定大小的数组场景(比vector更高效,内存占用更优) |
<deque> |
双端队列(支持首尾高效插入删除,随机访问) | push_back()、push_front()(头部添加)、pop_back()、pop_front()(头部删除)、[](访问) |
需要在两端频繁操作的场景(如滑动窗口、双端队列问题) |
补充说明
. 性能对比:
- 有序容器(map/set/multimap/multiset):插入/删除/查询O(logn),适合需要排序或范围查询的场景
- 无序容器(unordered_map/unordered_set):插入/删除/查询平均O(1),最坏O(n),适合高频单元素操作
- 向量容器(vector):随机访问O(1),尾部插入删除O(1),中间插入删除O(n)
这些数据结构基本覆盖了编程考试中的绝大多数场景,根据具体问题的需求选择合适的容器可以显著提高代码效率和简洁性。
排序
| 头文件 | 核心算法 | 常用函数 | 适用场景 |
|---|---|---|---|
<algorithm> |
排序、查找、比较、修改等通用算法(需搭配迭代器或容器使用) | sort()(排序)、find()(查找)、reverse()(反转)、max_element()(找最大值) |
对容器元素进行排序、查找等操作 |
数学
其实也就用到了abs,pow?
| 头文件 | 核心功能 | 常用函数 | 适用场景 |
|---|---|---|---|
<cmath> |
基础数学函数(C++ 风格,兼容 C 语言的<math.h>) |
abs()(绝对值)、sqrt()(平方根)、pow(a,b)(a 的 b 次方)、round()(四舍五入) |
数值计算(如几何题、公式推导) |
更多推荐
所有评论(0)