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六大组件的交互关系
容器通过空间适配器来获取空间,算法通过迭代器存取容器中的内容,仿函数协助算法完成一些操作,容器适配器修饰仿函数。