STL作为C++标准程序库的大脉系,在C++中使用频率较高,使用方便,也因其实现的高效性、普适性,越来越多人已经不满足于简单的运用了,更多的是想去学习、研究其实现的内部原理。对此,我们就需要对STL的大体结构有一个简单的了解,了解基本结构之后,我们将可以针对各个结构进行一定学习、研究。下面就开始介绍STL的基本结构:

    STL提供了六大组件,彼此可以组合套用:

    1.容器(Containers): 各种数据结构,如vector, list, deque, set, map等,可以用来存放数据。从实现角度来看,STL容器其实就是一种模版类。

    2.算法(algorithms): 包含各种常用算法,如sort, search, copy等。从实现角度来看,STL算法属于一种模版函数。

    3.迭代器(iterators): 用来建立容器与算法之间的联系,迭代器就是所谓的“泛型指针“,其实质为实现了对operator*, operator->, operator++, operator--等相应操作重载的模版类,因此,迭代器有了类似指针的各种行为(在某种意义上,原生指针也属于一种迭代器)。所有STL容器都有属于其自身的迭代器,因为各种容器的结构不一定是相同的,迭代器如何访问容器,需要根据容器结构来确定,而容器结构是设计者设计的,所以需要设计者将迭代器加入到容器中,并对其各种操作进行定义。

    4.仿函数(functors): 行为类似函数,实质为一种重载了operator( )的类或者模板类,可作为算法的某种策略。一般,函数指针也可以视为狭义的仿函数。

    5.配接器(adapters): 一种用来修饰容器、迭代器或者仿函数接口的东西。

    6.配置器(allocators): 负责空间的分配及管理。实质为实现了动态空间配置、空间管理、空间释放的模板类。

    STL六大组件交互关系: 容器通过配置器获取存放数据的内存空间,算法通过迭代器存取容器中的数据,仿函数可以协助算法进行某些策略变化,配接器可以修饰或者套接仿函数。

    写文不仅是对书中内容的一种回顾,也算是对自己学习历程的记录,后续需要用到某些内容时不必再去一页一页翻找。若有错误之处,欢迎指出!