STL学习系列之四:STL学习小结[VC/C++编程]
本文“STL学习系列之四:STL学习小结[VC/C++编程]”是由七道奇为您精心收集,来源于网络转载,文章版权归文章作者所有,本站不对其观点以及内容做任何评价,请读者自行判断,以下是其具体内容:
供应了范例安全、高效而易用特点的STL无疑是最值得C++程序员自大的部份.每一个C++程序员都应当好好学习STL:).
STL(Standard Template Library 尺度模板库)是C++尺度库的一个重要构成部份,它由Stepanov and Lee等人最早开辟,它是与C++几近同时开始开辟的;一开始STL挑选了Ada作为实现语言,但Ada有点不争气,最后他们挑选了C++,一个缘由了,C++中已经有了模板.在后来,STL又被增添进了C++库.1996年,惠普公司又免费公开了STL,为STL的奉行做了很大的奉献.
STL大体上包含container(容器)、algorithm(算法)和iterator(迭代器),容器和算法通过迭代器可以举行无缝衔接.
STL表现了范型编程的思惟,它具有高度的可重用性,高性能,高移植性.程序员不用考虑具体实现历程,只要可以纯熟的利用就OK了.(有爱好研究具体实现的,可以看侯捷老师编著的《STL源码解析》)这样他们便可以把精神放在程序开辟的别的方面.
我非常敬佩创造STL的那些计算机和数学精英.因为他们做了一件非常辛劳的事情―――抽象概念.而STL就是通过把容器抽象为统一的接口,算法操纵这个接口,通过迭代器来操作容器.因为接口不变,实现的容器可以随便更改.这样,就为编程、调试和扩大供应了便利.大概有一天,我们生产软件的时刻也可以想DIY一台PC一样简单,只要拿来呼应的实现模块,通过简单的拼装和调试便可以创造一个软件.这是多么令人高兴的一件事^_^.不过,到时刻,大概会有很多程序员失业了.呵呵,毕竟编写类库不需求很多的人员.
固然STL不是面向对象的,但,我想,每个人城市为它的创造力和高性能而感到高兴和折服.
1、容器
作为STL的最主要构成部份--容器,分为向量(vector),双端行列(deque),表(list),行列(queue),仓库(stack),调集(set),多重调集(multiset),映射(map),多重映射(multimap).
容器 | 特点 | 所在头文件 |
向量vector | 可以用常数时间拜候和改正肆意元素,在序列尾部举行插入和删除时,具有常数时间复杂度,对肆意项的插入和删除就有的时间复杂度与到末尾的距离成正比,特别对向量头的增添和删除的代价是惊人的高的 | <vector> |
双端行列deque | 基本上与向量相同,唯一的差别是,其在序列头部插入和删除操作也具有常量时间复杂度 | <deque> |
表list | 对肆意元素的拜候与对两头的距离成正比,但对某个位置上插入和删除一个项的耗费为常数时间. | <list> |
行列queue | 插入只可以在尾部举行,删除、检索和改正只答应重新部举行.按照先进先出的原则. | <queue> |
仓库stack | 仓库是项的有限序列,并满意序列中被删除、检索和改正的项只能是近来插入序列的项.即按照后进先出的原则 | <stack> |
调集set | 由节点构成的红黑树,每个节点都包含着一个元素,节点之间以某种作用于元素对的谓词布列,没有两个差别的元素可以拥有相同的次序,具有快速查找的功效.但是它是以牺牲插入车删除操作的效率为代价的 | <set> |
多重调集multiset | 和调集基本相同,但可以支慎反复元素具有快速查找本领 | <set> |
映射map | 由{键,值}对构成的调集,以某种作用于键对上的谓词布列.具有快速查找本领 | <map> |
多重调集multimap | 比起映射,一个键可以对应多了值.具有快速查找本领 | <map> |
考虑到差别的实际需求,更主要的是效率的需求,我们可以挑选差别的容器来实现我们的程序,以此到达我们提高性能的目的.这也是用好STL的一个难点,但这也是关键.
2、算法
算法部份主要由头文件<algorithm>,<numeric>和<functional>构成.<algorithm>是全部STL头文件中最大的一个,它是由一大堆模版函数构成的,可以认为每个函数在很大程度上都是独立的,此中常用到的功效范围触及到对比、交换、查找、遍历操作、复制、改正、移除、反转、排序、归并等等.<numeric>体积很小,只包含几个在序列上面举行简单数学运算的模板函数,包含加法和乘法在序列上的一些操作.<functional>中则定义了一些模板类,用以声明函数对象.
STL的算法也是非常优异的,它们大部份都是类属的,基本上都用到了C++的模板来实现,这样,很多类似的函数就不用自己写了,只要用函数模板就OK了.
我们利用算法的时刻,要针对差别的容器,比方:对调集的查找,最好不要用通用函数find(),它对调集利用的时刻,性能非常的差,最好用调集自带的find()函数,它针对了调集举行了优化,性能非常的高.
以上是“STL学习系列之四:STL学习小结[VC/C++编程]”的内容,如果你对以上该文章内容感兴趣,你可以看看七道奇为您推荐以下文章:
本文地址: | 与您的QQ/BBS好友分享! |