容器是什么
定义:在C++ 中容器被定义为:一些特定类型对象的集合。解释一下:容器是C++官方针对一些典型数据结构制定的一种类模板。(在数据存储上,这种对象类型,包含有其它对象或指向其它对像的指针,这种对象类型就叫做容器。存疑)。一般来讲,容器都定义在一个.h中,文件名与类型名相同。
作用:容器封装了一些对数据操作上的细节,可以提高代码泛化能力和编程便捷度。可看作是实现特定泛型编程问题的一种方案。
在C++ 中,standard template library(STL)主要有两部分构成:容器和操作这些容器的泛型算法。容器和标准模板库(STL )的关系,为下图:
容器,算法和泛型指针的关系,如下图:
容器的分类
STL 对定义的通用容器分三类:顺序性容器、关联式容器和容器适配器。
具体特性,如下表:
STL容器类 | 内部结构 | 随机/顺序存取 | 搜索速度 | 插入/移除 |
顺序式容器 | ||||
vector | 动态数组 | 随机存取 | 慢 | 队尾 |
list | 双向链表 | 双向顺序存取 | 很慢 | 任意位置 |
deque | 双端队列 | 随机存取 | 慢 | 头/尾 |
forword_list | 单向链表 | 单向顺序存取 | 很慢 | 任意位置 |
array | 数组 | 随机存取 | 慢 | 固定大小 无法插入/删除 |
string (可看作字符容器) | 类似vector | 随机存取 | 慢 | |
关联式容器 | ||||
set | 二叉树 | |||
multiset | 二叉树 | |||
map | 二叉树 | |||
multimap | 二叉树 | |||
容器适配器 | ||||
stack | ||||
queue | ||||
priority_queue |
数据存储结构如下:
顺序容器
- 选择哪种顺序容器?
除非有很好的选择别的顺序容器的理由,否则使用vector;
如果程序有很多小的元素,且空间的额外开销很重要,则不要使用list和forward_list(含过多指针);
根据插入或删除元素的位置选择;
如果不确定使用哪种容器,则只是用vector和list。 - vector:
- list:
- deque:
关联容器
容器适配器