Loading... ## 1、STL的历史 STL系由Alex创造与1979年前后,这也是Bjarne创造C++的年代.但是直到1993年9月,Alex和他一手创建的STL才与C++标准委员会有了第一次接触.中间的一系列过程在此不再详述. 最终,STL成为1998年9月定案的C++标准规格中C++标准程序库的一大脉系. ## 2、C++ STL的各种实现版本 ### 2.1 HP STL HP STL是所有STL实现版本的鼻祖,而且是open source的版本.其他版本的C++ STL一般是以HP STL为蓝本实现出来的. ### 2.2 PJ STL PJ STL版本由P.J Plauger开发.PJ版本继承HP版本.所以它之后的每个头文件都有HP的版本声明,. ### 2.3 STLport 网络上有个STLport站点,提供一SGI STL为蓝本的高度可移植实现版本.在侯捷先生著作《STL源码源码剖析》中的附录有孟岩写的一篇文章,专门介绍专门将STL port一直到VC++. ### 2.4 SGI STL SGI STL版本被GCC采用,因此你可以在GCC的include目录下找到所有STL的头文件,比如`/usr/local/gcc-8.2.0/include/c++/8.2.0`.GCC对C++语言特性的支持相当好,在C++的主流编译器中表现耀眼,连带地给予了SGI STL正面影响. 简单分析一下GCC include目录下的头文件,大致可分为下面几组: - C++标准规范下的C头文件,例如cstudio, cstdlib, cstring, cmath等 - C++标准库中不属于STL部分,例如stream,string等 - STL标准头文件,例如vector, deque, list, map, algrithm, functional - SGI STL内部文件(STL真正实现于此),例如std_vector.h, std_deque.h, std_list.h等(位于bits文件夹下) - ....其他 ## 3、STL六大组件 1. 容器(containers):各种数据结构,例如vector, list, deque, set, map用来存放数据.从实现的角度看,STL容器是一种class template 2. 算法(algorithms):各种常见算法,例如sort, search, copu, erase.从实现的角度看,STL算法是一种function template 3. 迭代器(iterators):扮演容器和算法之间的粘合剂.是所谓的"泛型指针".从实现的角度来看,迭代器是一种将`operator*`, `operator->`, `operator++`, `operator--`等指针相关操作予以重载的class template.所有的STL容器都有属于自己的迭代器,不同的容器有不同的迭代方法. 4. 仿函数(functors):行为类似函数,可作为算法的某种策略.从实现角度看,仿函数是一种重载了`operator()`的class template.一般函数指针可视为狭义的仿函数 5. 配接器(adapters):一种用来修饰容器或仿函数或迭代器接口的东西.例如,STL提供的queue和stack,虽然看似是容器,但是底层却是用借助deque,所有的操作都有底层deque供应.改变functor接口者,称为function adapter;改变container接口者,称为container adapter;改变iterator借口者,称为iterator adapter. 6. 配置器(allocators):负责空间配置与管理.从实现角度来看,配置器是一个实现了动态空间配置,空间管理,空间释放的class template Last modification:February 13th, 2021 at 07:57 pm © 允许规范转载