㈠ STL源码剖析怎么样
STL很庞大,本书很好地萃取出了STL的主要内容(不考虑异常,多线程等相关代码),并加以详略得宜的剖析,让人觉得STL原来如此简单。因为是STL组件本身就有很多类似的地方,所以侯先生的行文大量复用之前文字(有时完全粘贴,有时稍作改动),读起来像读优秀代码一般痛快。
㈡ 有必要读懂c++ stl源码吗
你想深入C++的话,看源码剖析就很有必要。学习别人写的东西,为什么算法大师能写出高效的安全稳定的算法,而我为什么不能?哪些部分是值得学习的?多去看一些开源代码很有好处,当然如果看的是些有问题的代码,就需要你的鉴别能力了。看看代码有哪些问题,如何改进,如何利用到自己的代码中,都是有好处的。
但是如果你只想用别人写的东西,做一些普通的软件,那可能就未必那么有用了。你只要功能上实现就可以了,但未必是一个高效的好程序。价值取向不同,需要的知识也不同。
㈢ 《STL源码剖析》pdf下载在线阅读,求百度网盘云资源
《STL源码剖析》侯捷电子书网盘下载免费在线阅读
链接:
书名:STL源码剖析
作者名:侯捷
豆瓣评分:8.7
出版社:华中科技大学出版社
出版年份:2002-6
页数:493
内容介绍:
学习编程的人都知道,阅读、剖析名家代码乃是提高水平的捷径。源码之前,了无秘密。大师们的缜密思维、经验结晶、技术思路、独到风格,都原原本本体现在源码之中。这本书所呈现的源码,使读者看到vector的实现、list的实现、heap的实现、deque的实现、Red Black tree的实现、hash table的实现、set/map的实现;看到各种算法(排序、查找、排列组合、数据移动与复制技术)的实现;甚至还能够看到底层的memory pool和高阶抽象的traits机制的实现。
作者介绍:
侯捷,出生于1961年09月28日,台南县柳营乡人,南京大学客座教授。第一次在大陆大学授课: 南京大学软件学院 and 同济大学软件学院。
㈣ 《STL源码剖析》还能看吗C++标准中 STL 只是加入了新的库,而不是重写
当然可以看。学习stl的实现原理的目的,是学习编程范式、技巧、语言的深入理解等过程。且不说c++ 11引入的新特性,只不过是一些语法糖,目前在工业界并没有普及开来。学习语言应该不仅仅限于学习语法本身,更重要的是背后的设计思想。这些思想,不管c++、python还是java等,都是通用的原理。
㈤ 什么是STL
它是由Alexander Stepanov、Meng Lee和David R Musser在惠普实验室工作时所开发 出来的。现在虽说它主要出现在C++中,但在被引入C++之前该技术就已经存在了很长的 一段时间。 STL的代码从广义上讲分为三类:algorithm(算法)、container(容器)和iterator( 迭代器),几乎所有的代码都采用了模板类和模版函数的方式,这相比于传统的由函数 和类组成的库来说提供了更好的代码重用机会。在C++标准中,STL被组织为下面的13个 头文件:、、、、、、、、、、、和。以下笔者就简单 介绍一下STL各个部分的主要特点。 二、算法 大家都能取得的一个共识是函数库对数据类型的选择对其可重用性起着至关重要的作用 。举例来说,一个求方根的函数,在使用浮点数作为其参数类型的情况下的可重用性肯 定比使用整型作为它的参数类性要高。而C++通过模板的机制允许推迟对某些类型的选择 ,直到真正想使用模板或者说对模板进行特化的时候,STL就利用了这一点提供了相当多 的有用算法。它是在一个有效的框架中完成这些算法的——你可以将所有的类型划分为 少数的几类,然后就可以在模版的参数中使用一种类型替换掉同一种类中的其他类型。 STL提供了大约100个实现算法的模版函数,比如算法for_each将为指定序列中的每一个 元素调用指定的函数,stable_sort以你所指定的规则对序列进行稳定性排序等等。这样 一来,只要我们熟悉了STL之后,许多代码可以被大大的化简,只需要通过调用一两个算 法模板,就可以完成所需要的功能并大大地提升效率。 算法部分主要由头文件,和组成。是所 有STL头文件中最大的一个(尽管它很好理解),它是由一大堆模版函数组成的,可以认 为每个函数在很大程度上都是独立的,其中常用到的功能范围涉及到比较、交换、查找 、遍历操作、复制、修改、移除、反转、排序、合并等等。体积很小,只包括 几个在序列上面进行简单数学运算的模板函数,包括加法和乘法在序列上的一些操作。 中则定义了一些模板类,用以声明函数对象。 三、容器 在实际的开发过程中,数据结构本身的重要性不会逊于操作于数据结构的算法的重要性 ,当程序中存在着对时间要求很高的部分时,数据结构的选择就显得更加重要。 经典的数据结构数量有限,但是我们常常重复着一些为了实现向量、链表等结构而编写 的代码,这些代码都十分相似,只是为了适应不同数据的变化而在细节上有所出入。ST L容器就为我们提供了这样的方便,它允许我们重复利用已有的实现构造自己的特定类型 下的数据结构,通过设置一些模版类,STL容器对最常用的数据结构提供了支持,这些模 板的参数允许我们指定容器中元素的数据类型,可以将我们许多重复而乏味的工作简化 。 容器部分主要由头文件,,,,,和组成 。对于常用的一些容器和容器适配器(可以看作由其它容器实现的容器),可以通过下 表总结一下它们和相应头文件的对应关系。 数据结构 描述 实现头文件 向量(vector) 连续存储的元素 列表(list) 由节点组成的双向链表,每个结点包含着一个元素 双队列(deque) 连续存储的指向不同元素的指针所组成的数组 集合(set) 由节点组成的红黑树,每个节点都包含着一个元素,节点之间以某种作用于 元素对的谓词排列,没有两个不同的元素能够拥有相同的次序 多重集合(multiset) 允许存在两个次序相等的元素的集合 栈(stack) 后进先出的值的排列 队列(queue) 先进先出的执的排列 优先队列(priority_queue) 元素的次序是由作用于所存储的值对上的某种谓词决定的的 一种队列 映射(map) 由{键,值}对组成的集合,以某种作用于键对上的谓词排列 多重映射(multimap) 允许键对有相等的次序的映射 四、迭代器 下面要说的迭代器从作用上来说是最基本的部分,可是理解起来比前两者都要费力一些 (至少笔者是这样)。软件设计有一个基本原则,所有的问题都可以通过引进一个间接 层来简化,这种简化在STL中就是用迭代器来完成的。概括来说,迭代器在STL中用来将 算法和容器联系起来,起着一种黏和剂的作用。几乎STL提供的所有算法都是通过迭代器 存取元素序列进行工作的,每一个容器都定义了其本身所专有的迭代器,用以存取容器 中的元素。 迭代器部分主要由头文件,和组成。是一个很小 的头文件,它包括了贯穿使用在STL中的几个模板的声明,中提供了迭代器使 用的许多方法,而对于的描述则十分的困难,它以不同寻常的方式为容器中的 元素分配存储空间,同时也为某些算法执行期间产生的临时对象提供机制,中的 主要部分是模板类allocator,它负责产生所有容器中的默认分配器。 五、对初学者学习STL的一点建议 对于之前不太了解STL的读者来说,上面的文字只是十分概括地描述了一下STL的框架, 对您理解STL的机制乃至使用STL所起到的帮助微乎甚微,这不光是因为深入STL需要对C ++的高级应用有比较全面的了解,更因为STL的三个部分算法、容器和迭代器三部分是互 相牵制或者说是紧密结合的。从概念上讲最基础的部分是迭代器,可是直接学习迭代器 会遇到许多抽象枯燥和繁琐的细节,然而不真正理解迭代器又是无法直接进入另两部分 的学习的(至少对剖析源码来说是这样)。可以说,适应STL处理问题的方法是需要花费 一定的时间的,但是以此为代价,STL取得了一种十分可贵的独立性,它通过迭代器能在 尽可能少地知道某种数据结构的情况下完成对这一结构的运算,所以下决心钻研STL的朋 友们千万不要被一时的困难击倒。其实STL运用的模式相对统一,只要适应了它,从一个 STL工具到另一个工具,都不会有什么大的变化。 对于STL的使用,也普遍存在着两种观点。第一种认为STL的最大作用在于充当经典的数 据结构和算法教材,因为它的源代码涉及了许多具体实现方面的问题。第二种则认为ST L的初衷乃是为了简化设计,避免重复劳动,提高编程效率,因此应该是“应用至上”的 ,对于源代码则不必深究。笔者则认为分析源代码和应用并不矛盾,通过分析源代码也 能提高我们对其应用的理解,当然根据具体的目的也可以有不同的侧重。
㈥ <<STL源码剖析>> << C++标准程序库>>
侯捷把STL的学习比喻为三个境界:
第一境界:熟用STL
第二境界:了解泛型技术的内涵与STL的学理乃至实作
第三境界:扩充STL
这三个境界都可以使用 << C++标准程序库>>,但是第三境界推荐使用<<STL源码剖析>>
㈦ 学习stl源码剖析前需要先看哪些东西
《STL源码剖析》不是讲怎么样使用STL和STL技巧的,是关于STL核心代码的剖析,是面向有丰富经验的STL程序员来补充和更好的理解STL底层核心机制,初学者看这本书的话基本上是一头雾水,建议先从基础学起,C++标准程序库 和C++stl是比较好的入门且使用的书籍,以后有了一定的STL经验,再去研究STL源码剖析,相信那时候你就会有了另一番对STL的领悟。
㈧ STL是什么怎么使用C++中的STL
STL(standard template libary),标准模板库。
这是C++标准的一部分。关于这个库有不少历史可以说,侯捷的《STL源码剖析》讲了不少。STL有好几种不同的实现,微软也有自己的实现。
关于使用,比如你用了下面的语句:
#include <vector>
就是使用了标准模板库里的 vector.
然后你这样声明向量:
vector<int> a; //向量a包含的元素是int型的
vector<double> b; //向量b包含的元素是double型的
你可以查找对应的头文件,它们都是以源码形式出现的,不过里面的符号定义的让人眼花缭乱,还是找书看比较好。
标准模板库包含了数据结构和算法等方面的内容,比较复杂,学习之前要有十足下信心。
㈨ STL是什么
STL是司太立合金的简称
司太立(Stellite)是一种能耐各种类型磨损和腐蚀以及高温氧化的硬质合金。即通常所说的钴基合金,司太立合金由美国人Elwood Hayness 于1907年发明。司太立合金是以钴作为主要成分,含有相当数量的镍、铬、钨和少量的钼、铌、钽、钛、镧等合金元素,偶而也还含有铁的一类合金。根据合金中成分不同,它们可以制成焊丝,粉末用于硬面堆焊,热喷涂、喷焊等工艺,也可以制成铸锻件和粉末冶金件。
司太立合金铸件适用于核电、石化、电力、电池、玻璃、轻工、食品等诸多领域。具有耐磨、耐蚀、抗氧化和耐高温特性。常用的产品有阀芯、阀座、轴类、轴套、泵类部件,玻璃、电池模具、喷嘴及切割刀具等。合金类别有:Co基合金铸件、Ni基合金铸件、Fe基合金铸件。司太立粉末冶金制品采用钴基、镍基或铁基合金雾化粉末,经压制、烧结、精加工制成。主要产品有阀杆、阀芯(球)、阀座、阀圈、密封环、木材锯齿、轴承泵、轴承球等。
㈩ 初学者可以看得懂《STL源码剖析》吗
《STL源码剖析》不是讲怎么样使用STL和STL技巧的,是关于STL核心代码的剖析,是面向有丰富经验的STL程序员来补充和更好的理解STL底层核心机制,初学者看这本书的话基本上是一头雾水,建议先从基础学起,C++标准程序库 和C++stl是比较好的入门且使用的书籍,以后有了一定的STL经验,再去研究STL源码剖析,相信那时候你就会有了另一番对STL的领悟。