![种花家4](https://git.poker/babybeekeeper/pic_Hosting/blob/master/20220906/种花家4.2pbk933wu1s0.webp?raw=true)
文章目录
STL概论
STL:英文全称Standard Template Library,也称为标准模板库,是为了建立数据结构与算法得一套标准,并且降低其间得耦合关系已提升各自的独立性、弹性、交互操作性,STL实现的是依据泛型思维架设起来的一个概念结构,包含有大量的模板类和模板函数,是C++提供的一个基础模板的集合
STL版本
自 1998 年 ANSI/ISO C++ 标准正式定案,C++ STL 规范版本正式通过以后,由于其实开源的,各个 C++ 编译器厂商在此标准的基础上,实现了满足自己需求的 C++ STL 泛型库,主要包括 HP STL、SGI STL、STLport、PJ STL、Rouge Wave STL 等
HP STL
HP STL 是 Alexandar Stepanov(STL 标准模板库之父)在惠普 Palo Alto 实验室工作时,与 Meng Lee 合作完成的。HP STL 是开放源码的,即任何人都可以免费使用、复制、修改、发布和销售该软件以及相关文档,但前提是必须在相关文档中,加入 HP STL 版本信息和授权信息
HP STL 是 C++ STL 的第一个实现版本,其它版本的 C++ STL 一般是以 HP 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 被 Visual C++ 编译器所采用,但和 PH STL、SGI STL 不同的是,PJ STL 并不是开源
STL组件
STL主要提供了六大组件,彼此可以组合套用,六大组件为:容器、算法、迭代器、仿函数、适配器、配置器
![stl组件](https://git.poker/babybeekeeper/pic_Hosting/blob/master/20220906/stl组件.1lncbh0icv4w.webp?raw=true)
容器(Containers)
容器就是一些模板类的集合,但是与普通模板类不同的是容器中封装的是组织数据的方法,也就是封装的数据结构
STL提供了两种标准容器:序列容器、关联式容器
序列容器
序列容器指的就是以线性排列(类似普通数组的存储方式)来存储某一指定类型的数据,并不会自动对存储的元素按照值的大小进行排序,该类容器主要包括的是array、vector、deque、list、forward_list
关联式容器
关联式容器指的是存储的元素都是以键值对<key,value>的形成进行存储,存在着对应关系即可以通过目标元素的键值来找到目标元素,关联式容器存储的元素会默认根据各元素的键值的大小做升序排序,该类容器主要包括有map、set、multimap、multiset
算法(Algorithms)
各种常用的算法:sort、search、copy…等,从实现的角度上来看STL算法是模板函数
迭代器(Iterators)
在STL中对容器进行读写操作都是通过迭代器来实现的,是容器和算法之间的胶合剂,STL容器都有附带于自己专属的迭代器
仿函数(Functors)
行为类似函数,可以当作是算法的某种策略,仿函数(functor)使一个类的使用看上去象一个函数,这个类就有了类似函数的行为,故称为仿函数类了
仿函数的语法几乎和我们普通的函数调用一样,不过作为仿函数的类,都必须重载operator()运算符
适配器(Adapters)
适配器是指用来修饰容器或者仿函数或迭代器接口,可以使一个类的接口(模板的参数)适配成用户指定的形式,从而让原本不能在一起工作的两个类工作在一起,容器、迭代器和函数都有适配器
配置器(Allocators)
配置器是用来负责空间配置和管理,即配置器是一个实现了动态空间配置、空间管理、空间释放的 class template
六大组件间的关系
容器(Containers)通过 配置器(Allocators)来获取元素存储所需要的内存空间,算法(Algorithms)通过迭代器(Iterators)来获取容器(Containers)中元素内容,仿函数(Functors)可以协助算法(Algorithms)完成不同的策略变化,适配器(Adapters)可以修饰或套接仿函数(Functors)
总结
STL标准模板库是为了建立数据结构与算法得一套标准,主要提供了六大组件,彼此可以组合套用,六大组件为:容器、算法、迭代器、仿函数、适配器、配置器
希望能和一起学习的人成长,有错误的地方请各位大佬帮忙指正,如果觉得有帮助就点个赞当作对我的一个小肯定❤,peace&love