模板库
约 792 字大约 3 分钟
2025-06-21
1.STL 的简介
1.1.STL 的概念
STL(standard template libaray 即:“标准模板库”)是 C++ 标准库的重要组成部分,不仅是一个可复用的组件库,也是一个包罗数据结构与算法的软件框架,是当之无愧的大师之作。
1.2.STL 的版本
原始版本:
Alexander Stepanov、Meng Lee两人在惠普实验室完成了STL的原始版本,本着开源精神,他们声明允许任何人任意运用、拷贝、修改、传播、商业使用这些代码,无需付费。唯一的条件就是也需要向原始版本一样做开源使用。原始版本也叫HP版本,是所有STL实现版本的始祖。P.J. 版本:由
P.J.Plauger开发,继承自HP版本,被Windows Visual C++采用,不能公开或修改。缺陷是,可读性比较低,符号命名比较怪异。RW 版本:由
Rouge Wage公司开发,继承自HP版本,被C++ Builder采用,不能公开或修改,可读性一般(该编译器后来被微软的VS打败,已经没落)。SGI 版本:由
Silicon Graphics Computer Systems,Inc公司开发,继承自HP版本。被GCC(Linux)采用,可移植性好,可公开、修改甚至贩卖,从命名风格和编程风格上看,可读性非常高。后面学习STL如果需要阅读部分源代码,主要参考的就是这个版本。
2.STL 的六大组件
STL 可以划分为六个组件:
补充:“容器”实际上就是
C++的“数据结构”。
3.STL 的学习境界
能熟用
STL语法明白
STL的底层原理能够根据需求来自主拓展、扩充
STL
4.STL 的缺陷
下面是 [2020] 年前的结论,未来的 C++ 可能会解决这些缺陷...
更新速度:这里值得吐槽的是
STL的更新速度,比较靠谱的上一版本是C++98,C++03是一些基本修订,13年后C++11才推出,STL才得以进一步更新线程安全:
STL到现在都没有支持线程安全,并发环境下需要自己加锁,而且锁的粒度比较大过于效率:
STL太追求效率了,导致内部比较复杂,例如:类型萃取、迭代器萃取等代码膨胀:
STL的使用会有代码膨胀的问题,这是模板语法本身导致的
5.STL 的学习规划
之后我会带您了解 STL(C++98) 的重要容器,并在所有容器都大致讲解完毕后,补充一些 C++11 的语法知识,然后讲解 STL(C++98) 和 STL(C++11) 的差别...