一.STL的概念
STL是C++标准库的重要组成部分,提供大量通用、可复用的数据结构与算法。是一个包罗数据结构与算法的软件框架。
核心本质:基于模板实现,代码与类型无关,可以适配任意的数据类型,不需要重复编写容器代码。
二.STL的版本
STL是一套接口标准,不同厂商写出不同实现代码,也就是我们即将要了解的HP、SGI、PJ版本。这些实现对外接口统一,但是底层的源码不同。下面一一介绍这些版本:
HP STL版本:
开发者:Alexander Stepanov(STL 之父)、Meng Lee以及惠普实验室
地位:该版本是所有的STL版本的源头
协议:开源,允许自由使用、修改、分发
现状:不再直接使用,作为后续所有版本的基础
SGI STL版本:
来源:该版本是基于HP STL版本的二次开发。
特点:开源,源码的可读性高
地位:gcc(Linux系统的默认编译器)和libstdC++的底层以此为基础
PJ版本:
特点:早期微软的默认STL实现,闭源,不能公开修改,内部命令晦涩,可读性差。
三.STL的六大组件

容器:管理、存放数据、封装各类数据结构,分为序列容器和关联容器
算法:提供通用处理逻辑,实现排序、查找、拷贝、遍历等操作。算法独立于容器,可复用。
迭代器:容器和算法之间的桥梁,统一访问容器元素,使算法不用关心容器的底层结构,实现算法与容器解耦,行为类似于指针。
仿函数:向算法传递自定义策略,代替普通函数,支持保存状态。
适配器:对现有的容器、仿函数、迭代器进行封装改造 ,生成新组件
空间配置器:专门负责容器内存的分配、释放、封装底层内存管理逻辑,对上层用户透明。
上述就是STL的六大组件,接下来的章节我们会具体学习。尽情期待!!!
四.STL的缺陷
- STL库更新很慢
- STL没有支持线程安全,并发环境下需要自己加锁,且锁的粒度是比较大的
- STL极度的追求效率,导致内部比较复杂
- STL的使用会有代码膨胀的问题(模板语法本身导致的)
五.STL的重要性
STL提供成熟的数据结构与算法,开发者不需要从零实现链表、动态数组、排序查找等逻辑,大幅度提升了开发的效率。
STL基于泛型模板编程,一套代码适配多种数据类型,可以实现代码的复用。
STL代码经过长期的优化,执行效率高、稳定性强,优于程序员手写的简易版本。
接口标准化,所有符号标准的编译器实现了API统一,增强了程序的可移植性。
降低开发门槛,统一编码规范,便于项目协作与代码去维护,是C++工业开发基础的工具库。
推动泛型编程的思想普及,改变传统变相过程、面向对象的编程思维。
下面章节我们将进入STL库的详细学习,尽情期待!!!