第十一天之STL(标准模板库)理论基础

基本概念

STL(Standand Template Library)标准模板库是惠普实验室开发的一系列软件的统称。现在主要出现在C++中但在引入C++之前该技术就出现很长一段时间了。
STL从广义上讲分为三类:algorithm(算法)、container(容器)和 iterator(迭代器),容器和算法可以通过迭代器进行无缝的连接。几乎所有的代码都是采用模板类和模板函数的方式。这相比于传统的由函数和类组成的库来说提供了更好的代码重写的机会。
在 C++标准中,STL 被组织为下面的 13 个头文 件:
、、、、、、、、、、
、 和。
在这里插入图片描述
STL详细的说分为六大组件:
– 容器(Container)
– 算法(Algorithm)
– 迭代器(Iterator)
– 仿函数(Function object)
– 适配器(Adaptor)
– 空间配制器(allocator)

使用STL库的好处:
1) STL是C++的一部分,因此不用在安装什么,她被内嵌在了编译器之内
2) STL的一个重要的特点是实现了数据结构和算法的分离,尽管这是一和简单的概念,但这种分离确实使STL变得更加的通用
例如:在STL的vector容器中,可以放入元素、基本数据类型的变量、元素的地址;
STL的sort函数可以操作vector、list容器
3)程序员可以不考虑STL的具体实现过程,只要熟练使用STL就可以了,这样他们就可以把精力放在程序开发的其他方面。
4)STL具有搞可重用性、高性能、 高移植性、跨平台等优点
高可重用性:STL 中几乎所有的代码都采用了模板类和模版函数的方式实现,这相比于传统的由函数和类组成
的库来说提供了更 好的代码重用机会。关于模板的知识,已经给大家介绍了。
高性能:如 map 可以高效地从十万条记录里面查找出指定的记录,因为 map 是采
用红黑树的变体实现的。(红黑树是平横二叉树的一种)
高移植性:如在项目 A 上用 STL 编写的模块,可以直接移植到项目 B 上。
跨平台:如用 windows 的 Visual Studio 编写的代码可以在 Mac OS 的 XCode 上直接编译。
5)STL 是 C++程序员的一项不可或缺的基本技能,掌握它对提升 C++编程大有裨益。

容器

在实际的开发过程中,数据结构本身的重要性不会逊于操作数据结构的算法的重要性,当程序中存在着对实践要求很高的部分时,数据结构的选择就显得十分的重要。
经典的数据结构数量有限,但是我们常常重复着一些为了实现向量、链表等结构而编写的代码,这些代码都十分的相似,只是为了适应不同数据类型的变化而在细节上有所出入。STL容器就为我们提供了这样的方便,他允许我们重复利用已有的实现构造自己的特定类型下的数据结构,通过设置一些模板,STL容器对常用的提供了支持,这些木板的函数我们指定容器的数据类型,可以将我们许多重复又乏味的工作简化。
容器部分主要有头文件,,,,, 和组成,对于常用的容器和容器适配器(可以看作是由其他容器实现的容器)可以通过下表来查看容器与头文件的对应关系
在这里插入图片描述
容器的分类
序列式容器:
每个元素都有固定的位置—取决于插入时机和地点,和元素的值无关
vector 、 list、 deque
关联式容器:
元素的位置取决于特定的排列顺序,和插入顺序无关
set 、 multiset、 map、 multimap

迭代器

迭代器从作用上来说是最基本的部分,可是理解起来比前两者都要费力一些。软件设计
有一个基本原则,所有的问题都可以通过引进一个间接层来简化, 这种简化在 STL 中就是
用迭代器来完成的。概括来说,迭代器在 STL 中用来将算法和容器联系起来,起着一种黏和
剂的作用。几乎 STL 提供的所有算法都是通 过迭代器存取元素序列进行工作的,每一个容
器都定义了其本身所专有的迭代器,用以存取容器中的元素。
迭代器部分主要由头文件,和组 成。是一个很小的头
文件,它包括了贯穿使用在 STL 中的几个模板的声明,中提供了迭代器 使用的许
多方法,而对于的描述则十分的困难,它以不同寻常的方式为容器中的元素分配
存储空间,同时也为某些算法执行期间产生 的临时对象提供机制,中的主要部分
是模板类 allocator,它负责产生所有容器中的默认分配器。

算法

函数库对数据类型的选择对于其可重用性起着至关重要得作用。举例来说,一个求平方根的函数,在使用浮点数作为其参数类型的情况下的可重用性肯定比使用整形作为它的参数类型要高。而C++通过模板的机制允许推迟对某些类型的选择,直到真正想使用模板或者说是对模板进行特化的时候,STL就利用了这一点提供了相当多的有用的算法。它是在一个有效的框架完成这些算法的–可以将所有的类型划分为少数的几类,然后就可以在模板的参数中使用一种类型替换掉同一类中的其他类型。
STL 提供了大约 100 个实现算法的模版函数,比如算法 for_each 将为指定序列中的每一个
元素调用指定的函数,stable_sort 以 你所指定的规则对序列进行稳定性排序等等。这样
一来,只要熟悉了 STL 之后,许多代码可以被大大的化简,只需要通过调用一两个算法模板,
就可以完成所需要 的功能并大大地提升效率。
算法部分主要由头文件,和组 成。是所有
STL 头文件中最大的一个(尽管它很好理解),它是由一大堆模版函数组成的,可以认为每
个函数在很大程度上 都是独立的,其中常用到的功能范围涉及到比较、交换、查找、遍历
操作、复制、修改、移除、反转、排序、合并等等。体积很 小,只包括几个在序
列上面进行简单数学运算的模板函数,包括加法和乘法在序列上的一些操作。
中则定义了一些模板类, 用以声明函数对象。

C++标准库

	C++强大的功能来源于其丰富的类库及库函数资源。C++标准库的内容总共在 50 个标准

头文件中定义。在 C++开发中,要尽可能地利用标准库完 成。这样做的直接好处包括:(1)
成本:已经作为标准提供,何苦再花费时间、人力重新开发呢;(2)质量:标准库的都是经
过严格测试的,正确性有保证; (3)效率:关于人的效率已经体现在成本中了,关于代码
的执行效率要相信实现标准库的大牛们的水平;(4)良好的编程风格:采用行业中普遍的做
法进行开发。
在 C++程序设计课程中,尤其是作为第一门程序设计课程,我们注重了语法、语言的机
制等方面的内容。程序设计能力的培养有个过程,跨过基本的原 理性知识直接进入到工程
中的普遍做法,由于跨度决定了其难度。再者,在掌握了基本原理的基础上,在认识标准库
的问题上完全可以凭借实践,逐步地掌握。标准 库的学习不需要认认真真地读书,需要的
是在了解概貌的情况下,在实践中深入。
这个任务就是要知道 C++程序设计课程中不讲的,但对程序设计又很重要的这部分内容。
至少我们要能先回答出“有什么”的问题。
C++标准库的内容分为 10 类,分别是(建议在阅读中,将你已经用过或听说过的头文件
划出来):
C1. 标准库中与语言支持功能相关的头文件
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
C++标准库的所有头文件都没有扩展名。C++标准库以形式的标准头文件提供。
在 形式标准的头文件中,与宏相关的名称在全局作用域中定义,其他名称在 std
命名空间中声明。在 C++中还可以使用 name.h 形式的标准 C 库头文件名

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值