C++Primer笔记(第八,九章)
关键词 : 输入输出流, 顺序容器
第八章: IO库
略.
第九章: 顺序容器
顺序容器: 元素在顺序容器中的顺序与其加入容器时的位置相对应.
关联容器: 元素的位置由元素相关联的关键字值决定.
顺序容器的两个性能指标:
- 向容器中增删元素的代价
- 非顺序访问容器中元素的代价
特性 | |
---|---|
vector | 可变大小数组, 支持快速随机访问, 在尾部之外的位置插入或删除元素可能很慢 |
deque | 双端队列, 支持快速随机访问, 在头尾位置插入\删除元素很快 |
list | 双向链表, 只支持双向顺序访问, 在任何位置插入\删除元素都很快 |
forward_list | 单向链表, 只支持单向顺序访问, 在任何位置插入\删除元素都很快 |
array | 固定大小数组, 支持快速随机访问, 不支持插入\删除元素 |
string | 与vector类似, 但专门用于保存字符(这也算是容器吗) |
选择容器的基本原则:
- 优先选用vector
- 如果程序有很多小的元素, 且空间的额外开销很重要, 则不要使用list或forward_list
- 如果要求随机访问元素, 应使用vector或deque
- 如果需要在容器中间插入\删除元素, 应使用list或forward_list
- 如果只在读取输入时才需要向容器中间插入元素, 随后随机访问 :
- 可以通过向vector追加元素再sort的方式避免在中间位置添加元素(原文: “确定是否真的需要在容器中间位置添加元素”, 理解: 当元素无序或者不能用某种顺序表达时上面这种方式就失效了)
- 如果必须在中间位置插入元素, 考虑在输入阶段使用list, 一旦输入完成, 将list中的内容拷贝到一个vector中(空间换时间罢).
- 一般来说, 应用中占主导地位的操作(访问or增删更多)决定了容器类型的选择