一、STL之概论
STL(Standard Template Library,标准模板库),是惠普实验室开发的一系列软件的统
称。现在主要出现在 c++中,但是在引入 c++之前该技术已经存在很长时间了。STL 从广义上分为: 容器(container) 算法(algorithm) 迭代器(iterator),容器和算法之间通过迭代器进行无缝连接, STL几乎所有的代码都采用模板类或者模板函数,这相比传统的由函数和类组成的库来说提供了更好的代码重用机会。
(从Python角度看, 可以简单理解为容器就是列表字典等,算法就是实现功能,迭代器就是for循环。)
STL大体分为六大组件,分别是:容器、算法、迭代器、仿函数、适配器(配接器)、空间配置器
1. 容器:各种数据结构,如vector、list、deque、set、map等,用来存放数据。从实现角度来看,STL容器是一种 class terplate
2. 算法:各种常用的算法,如sort、find、copy、for_each等。从实现角度来看,STL是一种function template
3. 迭代器:扮演了容器与算法之间的胶合剂,共有五种类型。 从实现角度来看,迭代器是一种将 operator*, operatoe->, operator++, operator-- 等指针相关操作予以重载的 class template,所有的STL容器都附带有自己专属的迭代器,只有容器的设计者才知道如何遍历自己的元素,原生指针(nativae pointer)也是一种迭代器。
4. 仿函数:行为类似函数,可作为算法的某种策略。从实现角度来看,仿函数是一种重载了 operator()的class 或者 class template
5. 适配器:一种用来修饰容器或者仿函数或迭代器接口的东西。
6. 空间配置器:负责空间的配置与管理。从实现角度来看, 配置器是一个实现了动态空间配置,空间管理,空间释放的class template
1. STL 是 C++ 的一部分,因此不用额外安装什么,它被内建在编译器之内
2. STL的一个重要特征是将数据和操作分离。数据有容器类别加以管理,操作则可以由定制的算法定义,迭代器在两者之间充当"粘合剂",以使算法可以和容器交互运作。
3. 程序员可以不用思考STL的具体实现过程,只要能熟练使用 STL就可以了。
4. STL 具有高可重用性,高性能,高移植性,跨平台的优点。
高可用性: STL 中几乎所有的代码都采用了模板类和模板函数的方式实现,这相比于传统的由函数和类组成的库来说具有更好的代码可重用机会。
高性能: 如 map可以高效的从十几万条记录里面查找出指定的记录,因为map采用红黑树的变体实现的。
高移植性: 如果在项目A上用STL编写的模块,可以直接移植到项目B上。