STL提供六大组件,彼此可以组合套用:
1.容器(containers):各种数据结构,如vector,list,deque,set,map,
用来存放数据。从实作的角度看,STL容器是一种class template。
2.算法(algorithms):各种常用算法如sort,search,copy,erase...,
从实作的角度看,STL算法是一种function template。
3.迭代器(iterators):扮演容器与算法之间的胶着剂,是所谓的 泛型指标,
是一种将operator*,operator->,operator++,operator--等指标相关操作
予以多载化的class template。所以STL容器都附带有自己专属的迭代器---是的,
只有容器设计者才知道如何巡访自己的元素。原生指标(native pointer)也是一
种迭代器。
4.仿函式(functors):行为类似函式,可作为算法的某种策略。从实作的角度看,
仿函式是一种重载了operator()的class或class template。一般函式指标可视为狭义
的仿函式。
5.配接器(adapters):一种用来修饰容器或仿函式或迭代器接口的东西。例如STL提供的queue和
stack,虽然看似容器,其实只能算是一种容器配接器,因为他们的底部完全借重deque,
所有动作都由底层的deque供应。改变functor接口者,称为function adapter,改变container
接口者,称为container adapter,改变iterator界面着,称为iterator adapter。
6.配置器(allocators):负责空间配置与管理,从实作的角度看,配置器是一个实现了动态空间配置、
空间管理、空间释放的class template。
STL六大组件的交互关系:Container透过Allocator取得数据存储空间,Algorithm透过Iterator存取
Container内容,Functor可以协助Algorithm完成不同的策略变化,Adapter可以修饰或套接Functor。