STL是建立在泛化之上的。数组泛化为容器,参数化了所包含的对象的类型。函数泛化为算法,参数化了所用的迭代器的类型。指针泛化为迭代器,参数化了所指向的对象的类型。STL中的六大组件:容器、算法、迭代器、配置器、适配器、仿函数。
这六大组件中在容器中分为序列式容器和关联容器两类,正好作为STL源码剖析这本书的内容。迭代器是容器和算法之间的胶合剂,从实现的角度来看,迭代器是一种将operator*、operator->、operator++、operator—等指针相关操作予以重载的class template.所有STL容器都附带有自己专属的迭代器,因为只有容器设计者才知道如何遍历自己的元素。仿函数是一种重载了operator()的class或class template,一般函数指针可视为狭义的仿函数。配接器是一种用来修饰容器或仿函数或迭代器接口的东西,例如STL提供的queue和stack,虽然看似容器,其实只能算是一种容器配接器,因为他们的底部完全借助deque,所有操作都由底层的deque供应。改变functor接口者,成为funciton adapter;改变container接口者,成为container adapter;改变iterator接口者,成为iterator adapter。
在STL内部定义了几类迭代器,但是在使用的时候,根据迭代器的使用方法可以将迭代器分为输入、输出迭代器、前向、双向迭代器、随机存取迭代器。
STL所实现的,是依据泛型思维架设起来的一个概念结构。这个以抽象概念为主体而非以实际类为主体的结构,形成了一个严谨的接口标准。在此接口之下,任何组件都有最大的独立性,并以所谓迭代器胶合起来,或以所谓配接器互相配接,或以所谓仿函数动态选