对C/C++学习感兴趣的可以看看这篇文章哦:C/C++教程
在软件行业,一直都希望建立一种可以重复运用的东西和一种可以制造出“可重复使用的东西”的方法,来让程序员的心血不至于随着时间迁移而烟消云散
子程序、程序、函数、类别、函数库、类别库、各种组件、结构化设计、模块化设计、面向对象设计、模式
以上所有无一不是软件工程为这一目标的的奋斗史,为的就是提升代码的复用性
而复用性必须要建立在某种标准之上
为了建立数据结构和算法的一套统一标准,并且降低其耦合,提升各自的独立性、弹性、交互性操作,C++社区诞生了STL。
STL的价值主要在两个方面:
STL是一个抽象概念库,这些抽象概念包括:
STL的创新在于具体的叙述了这些抽象概念,并加以系统化
即:STL实现的是以抽象概念为主体的结构,而不是我们常见的具体的class
进而形成了严谨的接口标准,在这样的接口下,任何组件都有最大的独立性,并用迭代器胶合起来、或用适配器互相配接、或以仿函数动态选择某种策略
C++的类允许我们自定义类别,其模板允许我们将类别参数化,这两者的结合通过traits编程技法,成就了STL
STL是由Alexander Stepanov创建于1979年前后,当时也是C++诞生的年代(1983年)
没想到吧,STL甚至比C++诞生的还早
在1993年,Alexander Stepanov带着它一手创建的STL,与C++标准委员会有了第一次接触
当时Alexander Stepanov给C++标准委员会作了一个演讲,讲题是:The Science of C++ Programming
从该讲题的名字也能看出,其理论性很强,但却很受欢迎
之后便顺利的提交了相关提案到委员会,最后也以80%的赞成,成功进入C++标准化的正式流程
其影响非常巨大,比如C++原本就有的stream,string等也都用模板重新写了一遍,至此,C++中几乎到处都是模板
STL共给我们提供了六大组件,彼此可以组合套用
因为只有设计者才知道怎么遍历自己的元素
()的类或类模板六大组件之间的关系为:容器通过配置器取得内存,算法通过迭代器存取容器中的内容,仿函数可以协助算法完成不同的策略变化,而适配器这可以修饰或套接仿函数
目前STL已经是C++标准程序库的一大组成部分,因此所有的C++编译器都一定持有一份STL源码,就在各个C++头文件中
STL并非以二进制程序出现,而是直接提供源代码
按C++标准,所有的标准头文件都不在有扩展名,比如C中常见的.h,但或许是为了兼容,一些STL版本两种类型的头文件都存在
比如在VS中,就可以很方便的查看其源码:
不过没有一定的功力,其源码应该是很难看得懂的
但对于我们C/C++开发者而言,并没有太大的必要去弄懂STL源码
想要了解STL方方面面的内容如何使用,可以参照我的另一篇文章:STL详解