STL的版本
HP STL
HP STL 是 Alexandar Stepanov(STL 标准模板库之父,文章后续简称 Stepanov)在惠普 Palo Alto 实验室工作时,与 Meng Lee 合作完成的。HP STL 是开放源码的,即任何人都可以免费使用、复制、修改、发布和销售该软件以及相关文档,但前提是必须在相关文档中,加入 HP STL 版本信息和授权信息。
HP STL 是 C++ STL 的第一个实现版本,其它版本的 C++ STL 一般是以 HP STL 为蓝本实现出来的。不过,现在已经很少直接使用此版本的 STL 了。
SGI STL
Stepanov 在离开 HP 之后,就加入到了 SGI 公司,并和 Matt Austern 等人开发了 SGI STL。严格意义上来说,它是 HP STL 的一个继承版本。和 HP STL 一样,SGI STL 也是开源的,其源代码的可读性可非常好,并且任何人都可以修改和销售它。
注意,和 STL 官方版本来说,SGI STL 只能算是一个“民间”版本,因此并不是所有支持 C++ 的编译器都支持使用 SGI STL 模板库,唯一能确定的是,GCC(Linux 下的 C++ 编译器)是支持的,所以 SGI STL 在 Linux 平台上的性能非常出色。
STLport
为了使 SGI STL 的基本代码都适用于 VC++ 和 C++ Builder 等多种编译器,俄国人 Boris Fomitchev 建立了一个 free 项目来开发 STLport,此版本 STL 是开放源码的。
PJ STL
PJ STL(全称为 P.J. Plauger STL)是由 P.J.Plauger(美国人,1965 年毕业于普林斯顿大学,物理专业学士)参照 HP STL 实现出来的,也是 HP STL 的一个继承版本,因此该头文件中不仅含有 HP STL 的相关授权信息,同时还有 P.J.Plauger 本人的版权信息。
其实 PJ STL 是 P.J.Plauger 公司的产品,尽管该公司当时只有 3 个人。
PJ STL 被 Visual C++ 编译器所采用,但和 PH STL、SGI STL 不同的是,PJ STL 并不是开源。
Rouge Wave STL
该版本的 STL 是由 Rouge Wave 公司开发的,也是继承 HP STL 的一个版本,它也不是开源的。
Rouge Wave STL 用于 Borland C++ Builder 编译器中,我们可以在 C++ Builder 的 Inculde 子目录中找到该 STL 的所有头文件。
值得一提的是,尽管 Rouge Wave STL 的性能不是很好,但 C++ Builder 对 C++ 语言标准的支持还算不错,所以在一定程度上使 Rouge Wave STL 的表现得以改善。
SGI STL六大组件
STL 提供六大组件,彼此可以组合套用:
容器(containers):各种数据结构,如 vector, list, deque, set, map
算法(algorithms):各种常用算法如 sort, search, copy, erase…
迭代器(iterators):扮演容器与算法之间的胶着剂,是所谓的「泛型指标」
仿函式(functors):行为类似函式,可做为算法的某种策略(policy)
配接器(adapters):一种用来修饰容器(containers)或仿函式(functors)或迭代器(iterators)接口
空间配置器(allocators):负责内存配置与管理
(本文只简单做个人理解,深入理解看源码和《STL源码剖析》)