1.容器:
各种数据结构:如vector list deque set map,用来存放数据
容器类是容纳、包含一组对象或对象集的对象,通过容器类提供的成员函数可以实现对序列元素的各种操作。
什么是容器?
百度百科:容器是指用以容纳物料并以壳体为主的基本装置。常用作储存设备或其他化工设备的外壳。在C++中,STL提供了大量的容器类。容器类的对象可以认为是“容器”。
容器的种类:
STL容器通常分为三种:序列式容器、关联式容器、容器适配器,(其中容器适配器不能算为真正意义上的容器,严格意义上算为容器的使用类,它是在容器的基础上发展起来的)
- 序列式容器
string | 类似动态顺序表 |
vector | 动态数组类型的顺序表 |
array(C++11) | 静态数组 |
list | 带头节点的双向链表 |
forward_list | 带头节点的单链表 |
deque | 双端对列,类似于二维数组 |
序列式容器最主要的特点是可以在首端删除元素,在末尾可以插入元素
- 关联式容器
底层为红黑树:
map | 保存<key , value>键值对,key唯一 |
set | 保存 key , key唯一 |
multimap | 保存<key , value>, key不唯一 |
multiset | 保存 key, key不唯一 |
因为底层为红黑树:所以其遍历是关于 key 有序,查找的时间复杂度为O(log2^N)
底层为哈希结构:
unordered_map | 保存<key , value>键值对,key唯一 |
unordered_set | 保存 key , key唯一 |
unordered_multimap | 保存<key , value>, key不唯一 |
unordered_multiset | 保存 key, key不唯一 |
因为底层为哈希结构:查找的时间复杂度为O(1),用空间换时间。
容器适配器
stack | 栈 |
queue | 队列 |
priority_queue | 优先级对列 |
2.算法
常用的算法有sort search copy erase
3.迭代器
将容器与算法连接起来,也就是所谓的“泛型指针”,常见的迭代器有5中类型,(基本上都是指针相应的一些操作)。operator -> ,operator* , operator++ ,operator-- 等指针相关的操作重载,原生态的指针也算是迭代器(vector的迭代器就为原生态的指针)。
4.仿函数
类似与函数的类,仿函数基本上可以看作是将operator()的操作进行了重载。
5.容器适配器
6.配置器
负责空间的配置与管理,配置器实现了动态空间的配置,管理,释放。
STL六大组件的交互关系
容器通过空间适配器来获取空间,算法通过迭代器存取容器中的内容,仿函数协助算法完成一些操作,容器适配器修饰仿函数。