C++语言基础知识

STL 容器(AI 辅助生成、待检错)

1. vector

  • 头文件: <vector>
  • 描述: 动态数组,能够自动调整大小
  • 底层结构: 数组
  • 插入操作: emplace_back, insert
  • 访问操作: front, back, operator[], at
  • 删除操作: pop_back, erase
  • 应用场景: 当需要快速随机访问元素且不需要频繁在中间位置插入或删除元素时
  • string,头文件,使用类 vector 的数据结构

2. list

  • 头文件: <list>
  • 描述: 双向链表
  • 底层结构: 双向链表
  • 插入操作: emplace_front, emplace_back, insert
  • 访问操作: front, back
  • 删除操作: pop_front, pop_back, remove, erase
  • 应用场景: 需要频繁地在列表的任意位置进行插入和删除操作时

3. queue

  • 头文件: <queue>
  • 描述: 队列,先进先出(FIFO)的数据结构。
  • 底层结构: 通常由适配器实现,底层使用其他容器如 dequelist
  • 插入操作: push
  • 访问操作: front, back
  • 删除操作: pop
  • 应用场景: 实现 FIFO 操作逻辑,例如任务调度。

4. priority_queue

  • 头文件: <queue>
  • 描述: 优先级队列,总是弹出具有最高优先级的元素。
  • 底层结构: 通常由适配器实现,底层使用堆数据结构,如 std::vector 作为基础容器。
  • 插入操作: push
  • 访问操作: top
  • 删除操作: pop
  • 应用场景: 需要快速获取最高优先级元素的场景。

5. deque (double-ended queue)

  • 头文件: <deque>
  • 描述: 双端队列,可以在两端进行高效插入和删除
  • 底层结构: 分配的连续内存块组成的数组
  • 插入操作: emplace_front, emplace_back, push_front, push_back, insert
  • 访问操作: front, back, operator[], at
  • 删除操作: pop_front, pop_back, erase
  • 应用场景: 当需要从两端高效地添加或移除元素时

6. stack

  • 头文件: <stack>
  • 描述: 栈,后进先出(LIFO)的数据结构。
  • 底层结构: 通常由适配器实现,底层使用其他容器如 vectordeque
  • 插入操作: push
  • 访问操作: top
  • 删除操作: pop
  • 应用场景: 实现 LIFO 操作逻辑,例如表达式求值。

7. set

  • 头文件: <set>
  • 描述: 关联容器,存储唯一键值,自动排序
  • 底层结构: 平衡二叉树 (通常为红黑树)
  • 插入操作: emplace, insert
  • 访问操作: find, lower_bound, upper_bound
  • 删除操作: erase
  • 应用场景: 当需要维护一个有序集合且不允许重复元素时

8. map

  • 头文件: <map>
  • 描述: 关联容器,存储键值对,键值唯一并自动排序
  • 底层结构: 平衡二叉树 (通常为红黑树)
  • 插入操作: emplace, insert
  • 访问操作: find, lower_bound, upper_bound
  • 删除操作: erase
  • 应用场景: 当需要通过键来高效查找、插入和删除数据时

9. unordered_set

  • 头文件: <unordered_set>
  • 描述: 哈希表实现的容器,存储唯一键值
  • 底层结构: 哈希表
  • 插入操作: emplace, insert
  • 访问操作: find, count
  • 删除操作: erase
  • 应用场景: 当需要快速查找和插入操作而不关心顺序时

10. unordered_map

  • 头文件: <unordered_map>
  • 描述: 哈希表实现的容器,存储键值对,键值唯一
  • 底层结构: 哈希表
  • 插入操作: emplace, insert
  • 访问操作: find, count
  • 删除操作: erase
  • 应用场景: 当需要通过键来快速查找数据而不关心顺序时

11. pair

  • 头文件: <utility>
  • 描述: 存储两个元素的简单容器
  • 底层结构: 两个成员变量
  • 插入操作: 构造函数初始化
  • 访问操作: first, second
  • 删除操作: N/A (不可删除)
  • 应用场景: 当需要同时处理两个相关数据时

12. bitset

  • 头文件: <bitset>
  • 描述: 存储位序列
  • 底层结构: 内部实现细节依赖于实现
  • 插入操作: 构造函数初始化, set
  • 访问操作: test, operator[]
  • 删除操作: reset
  • 应用场景: 高效处理位操作,例如用于压缩算法、位图等

13. array

  • 头文件: <array>
  • 描述: 固定大小的数组容器。
  • 底层结构: 数组
  • 插入操作: N/A (不支持插入操作)
  • 访问操作: operator[], at, front, back
  • 删除操作: N/A (不支持删除操作)
  • 应用场景: 当需要固定大小的数组且不需要动态调整大小时。

无符号和有符号

1
2
unsigned short int i=(unsigned short int)(-1234);
printf("%hu\n",i);

Computer Network

网络字节流

参考连接

  • 网络字节流是指网络传输时先后到达的字节
  • 网络字节序编码是大端序(高位在低地址)
    • 数值 0x01020304 在大端机器内存中地址排列为:[0x01,0x02,0x03,0x04]

HTTP

  • http 中的 get、post 区别,是怎么做的

数据结构 Data Structure

数组

  • 用连续内存存储数据
  • 读写操作复杂度 O(1)

字符串

  • 用连续内存存储字符

链表

  • 由指针把若干个节点连接成链状结构

  • 节点之间用指针链接
  • 除根节点之外每个节点只有一个父节点,根节点没有父节点
  • 叶子节点没有子节点

二叉树

  • 每个节点最多只能有两个子节点

二叉搜索树

  • 若其左子树不为NULL,则左子树上所有节点的值都根节点的值
  • 若其右子树不为NULL,则右子树上所有节点的值都根节点的值
  • 其左右子树也分别是二叉搜索树
  • 查询复杂度

  • 最大堆:根节点的值最大
  • 最小堆:根节点的值最小

  • 先进后出

队列

  • 先进先出

多线程

异常处理

算法

排序

算法 时间复杂度 稳定性
冒泡排序
选择排序 ×
归并排序
快速排序 ×
堆排序 ×

查找

  • 二分查找

动态规划

p