为实现方便实用的标准库,表达容器和算法等抽象概念,STL融合了OO(object oriented)和GP(generic programming),并通过traits编程技法,实现了完善的STL框架。
六大组件
STL的的六大组件互相配合,彼此组合套用:
-
分配器allocator
负责动态空间配置、管理和释放。 -
容器 container
各类数据结构,包括vector, list, deque, stack, queue, map, set等。 -
迭代器 iterator
是一种泛型指针,根据容器类型的不同,共有五种,存在继承关系。
从实现角度看,迭代器是将 operator*, ->, ++, – 等指针相关操作进行重载的 class template。容器大多需要定义自己的迭代器,c++中原生指针也是一种迭代器。 -
算法 algorithm
针对容器的各种算法,排序、查找、统计等,其实是function template。 -
仿函数 functor
仿函数实际定义为class,但行为类似函数,作为算法的某种比较或行为策略。
从实现的角度看,仿函数是重载了 operator() 的class 或 class template。一般函数指针可视为狭义的仿函数。 -
适配器 adaptor
一种用来修饰容器或仿函数或迭代器接口的东西。