STL概论与组成

2 篇文章 0 订阅
种花家4

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组件

容器(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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值