Appearance
附录 C · 术语中英对照表
本附录汇总本书涉及的 STL 术语、容器名、迭代器类型与常见英文报错信息,供阅读英文资料与调试时对照。
一、STL 整体概念
| 中文 | 英文 | 说明 |
|---|---|---|
| 标准模板库 | STL(Standard Template Library) | C++ 的通用数据结构与算法库 |
| 泛型编程 | Generic Programming | 用模板编写与类型无关的代码 |
| 容器 | Container | 存储数据的对象,如 vector、set |
| 迭代器 | Iterator | 遍历容器元素的"泛化指针" |
| 算法 | Algorithm | 与容器解耦的通用操作,如 sort、find |
| 函数对象 / 仿函数 | Functor / Function Object | 重载了 operator() 的对象 |
| 适配器 | Adapter | 在已有容器上封装出新接口,如 stack |
| 分配器 | Allocator | 负责内存分配与释放的组件 |
| 模板 | Template | 编译期生成代码的机制 |
| 实例化 | Instantiation | 模板生成具体类型的过程 |
二、容器分类术语
| 中文 | 英文 | 包含 |
|---|---|---|
| 序列式容器 | Sequence Container | vector、list、deque、array、forward_list |
| 关联式容器 | Associative Container | set、multiset、map、multimap(有序,红黑树) |
| 无序关联式容器 | Unordered Associative Container | unordered_set、unordered_map 等(哈希表) |
| 容器适配器 | Container Adapter | stack、queue、priority_queue |
| 近容器 | Near Container | 数组、string、bitset 等 |
| 动态数组 | Dynamic Array | vector |
| 双向链表 | Doubly Linked List | list |
| 双端队列 | Double-ended Queue | deque |
| 红黑树 | Red-Black Tree | set / map 的底层 |
| 哈希表 | Hash Table | unordered_* 的底层 |
| 二叉堆 | Binary Heap | priority_queue 的底层 |
| 大顶堆 / 小顶堆 | Max Heap / Min Heap | 堆顶为最大 / 最小值 |
| 栈 | Stack | LIFO |
| 队列 | Queue | FIFO |
| 优先队列 | Priority Queue | 按优先级出队 |
| 键值对 | Key-Value Pair | pair / map 的元素 |
三、迭代器类型
| 中文 | 英文 | 支持的操作 | 典型容器 |
|---|---|---|---|
| 输入迭代器 | Input Iterator | 只读,单向 ++ | istream_iterator |
| 输出迭代器 | Output Iterator | 只写,单向 ++ | ostream_iterator |
| 前向迭代器 | Forward Iterator | 读写,单向 ++ | forward_list |
| 双向迭代器 | Bidirectional Iterator | 读写,++ 与 -- | list、set/map 系列 |
| 随机访问迭代器 | Random Access Iterator | 读写,+n、-n、[]、比较 | vector、deque、数组 |
记忆:算法要求的迭代器等级决定了它能用于哪些容器。例如
sort需要随机访问迭代器,因此不能排 list。
四、常用操作术语
| 中文 | 英文 | 中文 | 英文 |
|---|---|---|---|
| 插入 | insert / push | 删除 | erase / pop |
| 查找 | find / search | 计数 | count |
| 排序 | sort | 去重 | unique |
| 反转 | reverse | 交换 | swap |
| 清空 | clear | 判空 | empty |
| 容量 | capacity | 预留 | reserve |
| 重设大小 | resize | 遍历 | traverse / iterate |
| 上滤(堆) | sift up / percolate up | 下滤(堆) | sift down / percolate down |
| 扩容 | reallocate | 迭代器失效 | iterator invalidation |
| 均摊复杂度 | amortized complexity | 最坏情况 | worst case |
| 字典序 | lexicographical order | 比较器 | comparator |
五、常见英文报错 → 中文对照
| 英文报错(关键词) | 中文含义 | 常见原因 |
|---|---|---|
no matching function for call to | 找不到匹配的函数 | 参数类型或个数不对 |
no member named 'xxx' | 没有名为 xxx 的成员 | 该容器没有这个成员函数(如对 stack 用 clear) |
'xxx' is not a member of 'std' | std 中没有 xxx | 拼错名字或漏了头文件 |
invalid use of incomplete type | 使用了未定义类型 | 只声明未定义,或头文件不全 |
cannot bind non-const lvalue reference | 不能绑定非常量左值引用 | 传了临时对象给非 const 引用参数 |
segmentation fault | 段错误(访问非法内存) | 越界访问、空容器 top()、解引用 end() |
bad_alloc | 内存分配失败 | 申请空间过大 |
out_of_range | 越界 | at() 下标越界(这是 at 的唯一优势) |
map::at | map 的 at 抛出越界 | key 不存在(不像 [] 会插入) |
expression cannot be used as a function | 表达式不能当函数用 | 少了括号或对象名被变量遮蔽 |
expected ';' before | 缺分号 | 漏写分号或括号不匹配 |
undeclared identifier | 未声明的标识符 | 拼错变量名或漏了 using namespace std; |
cannot convert 'xxx' to 'yyy' | 无法类型转换 | 类型不匹配,如拿迭代器当下标 |
no operator '<<' matches | 没有匹配的 << 运算符 | 试图直接输出 pair / 自定义结构 |
template argument deduction failed | 模板参数推导失败 | 类型信息不足,需显式指定 |
看报错的三条口诀:
- 先看第一行错误行号,编译器后续报错常是连锁反应;
no member named说明用错了容器,回去查该容器的成员函数表(附录 B 第四节);- 段错误先查两件事:容器是否为空、下标是否越界。
术语以本书正文用法为准;英文拼写以 C++ 标准库官方写法为准。
