STL源码剖析高清完整版.pdf

所需积分/C币:50 2015-01-16 11:54:02 17.67MB PDF
收藏 收藏
举报

STL源码剖析高清完整版.pdf
STL源码剖析 这次探险,还是勇敢地向浓雾中前进,当你受困于STL精致的大网之中,为那些迷一般 的结构和操作感到茫然无措的时侯,所有人都会冒出一个念头:“如果有这样一本书, 既能够提纲挈领,为我理顺思绪,指引方向,同时又能够照顾小节,阐述细微,帮助我 更快更好地理解STL源码,那该有多好! 望着长长的STL著作列表,一个“真正”的C++程序员,多少会有一点遗憾。自 从STL问世以来,出版了大量的书籍,帮助读者了解它的思想,学习它的用法,掌握它 的技巧。其中佼佼者如 Matt Auster的《 Generic Programming and StL》, Nicolai josuttis 的巛TheC++ Standard Library》, Scott Meyers的《 ffective StL》,已成C+经典名著 然而,定位在引导学丬者进行STL源码分析的著作,可以说是凤毛麟角。毕竞,既要能 高屋建瓴,剖析大架构,不为纷繁琐碎之细节而迷乱,又能具体而微,体现细致之处的 精妙缜密,不因为宏大体系而失之粗略,无论对于专家高手还是技术作家,都是太难达 到的目标 读了这本《STL源码剖析》之后,我认为,这个遗憾终于被补足了 本书的作者侯捷先生是蜚声海峡两岸的著名I技术作家,在C++、 Windows系统 原理、泛型理论和STL等技术领域有极深的造诣。然而,侯先生最令人称道之处,乃是 他剖析大架构的能力。所谓剖析大架构,就是要在洋洋洒洒数以万行计的源码中,精准 定位,抽取核心观念,高屋建瓴,纲举目张,将看上去乱麻一般的源码梳理得头绪清晰, 条理分明,同时又照顾细节,参透精微,把一个个关键动作阐述得通通透透。这种能力, 我以为至少在华人技术作家中,侯先生堪执牛耳!在他的名作《深人浅出MFC》中, 侯先生将自己这方面的能力展现得淋漓尽致,而在这本《STL源码剖析》中,我们看到 了又一次更加精彩的表现 我有机会作为大陆最早的几个读者之一,详细拜读了侯先生的这本STL专着,内 心产生了一种强烈的技术冲动。说得俗一点,就是觉得很过瘾!具体来说,我认为这本 书至少有四大特点,使它成为我所见过的最出色的一本STL源码剖析类著作 首先,选材精当,立足高远。STL是一个标准,因而有各种实现版本。本书所剖析 的 SGI STL,可以说是设计最巧妙、思想最深刻、获得赞誉最盛、认同最广的SI实现 品。当然,这份出自SL之父 Alex Stepanov,以及 Matt Austern, Dayid musser等巨 匠之手的经典作品,剖析阐述起来自然也需要花费更大的心力。侯先生藉其扎实的理论 与技术素养,毅然选择这份作品来剖析,是需要极大勇气与自信的。同样,本书对读者 的预期,也是很高的,读者不但要有扎实的基本功,更要有掌握STL的兴趣与坚韧意志 读这本书,你可以有允分的信心,学到的是超一流大师的思想和经验,所谓名门正派, 高屋建瓴 The annotated stl sources 高屋建瓴细致人微—《STL源码剖析》引介 其次,脉络清晰,组织順序匠心独具。仼何人打算系统阅读STL源码,所必须做 出的第一个决定就是,从何处开始?我在初读此书时,一个最感疑惑的地方就是侯先生 竞然把 allocator放在所有组件之前讲述。要知道, allocator这个东西,对一般的使用者 完全透明,根本感觉不到其存在,以至于在名著《TheC++ Standard libaray》中, Nicolai Josuttis将这一部分放在全书最后。既然如此,又何必让这个无名小卒占据头版头条?我 开始还真是不理解。直到后来,我自己有些扩展STL的实践,才发现,用的时候你 固然可以对 allocator不闻不问,但-旦要领悟STL的工作原理,或者要自己扩展STL 的功能,则对于 allocator的掌握几乎是第一先决条件,不了解 allocator,则无论剖析也 好,扩展也罢,必然处处碰壁。侯先生毫不迟疑,首先帮读者搬开这块绊脚石,理出头 绪,实在是匠心独具,紧接着的第三章 Iterator及 traits,直入STL的核心观念与关键技 术,剑走中锋,直取要害,高举高打,开诚布公,直接把理解STL的钥匙交到读者手上 此章一过,读者神完气足,就可以大刀阔斧地打通STL的重重关隘。此布局只要稍有变 化,读者的学习难度势必猛增。侯先生的此种安排,实在是大家手笔! 此外,本书在技术上迎难而上,详略得当,完整而重点突出。了解 SGI STL的读 者都知道,这份作品对C+标准中的STL做了大量的扩充,增加了专用的高效 allocator, 用以操作巨型字符串的rope,单链表 slist,以及万众企盼的hash容器等等,再加上STL 本身就有很多精微之处,技术上的难点不少。此类书籍的作者,但凡稍有一丝懈怠之心, 大可以冠冕堂皇地避重就轻。然而侯先生在此书中对重点难点亳不避讳,无论是标准功 能还是非标准功能,只要对读者理解STL架构有益,只要有助于提高读者的技术,增长 读者的视野与经验,书中必然不畏繁难,将所有技术细节原原本本和盘托出。另一·方面, 所谓剖析源码,其目的在于明理、解惑,提高自身水平,并不是要穷经皓首,倒背如流 因此,一旦道理讲消楚,书中就将重复与一般性的内容一笔带过,孰轻孰重,一目了然, 详略十分得当,这一点对于提高读者的学习效率,有着巨大的意义 最后一点,本书通过大量生动范例和插图讲解基本思想,在同类书籍中堪称典范 虽然我把这一点放在最后,但我相信大部分读者站在书店,随手翻过这本书,得到的第 印象便是这一点。STL之所以为大家所津津乐道,除了其思想深刻之外,最大的因素 是它实用。它所包装的,是算法与数据结构的基本功能。作为一个程序员,如果你是做 数据库编程的,大可以不懂汇编语言,如果你是写驱动程序的,大可以不必通晓人工智 能,写编译器的可以不用懂什幺计算机图形学,操作系统内核高手不用精通网站架设 然而,如果你不懂数据结构与算法的基础知识,不具备数据结构与算法的基本技能,那 就完全丧失称为一个程序员的资格!市面上讲述算法与数据结构的专着汗牛充栋,俯拾 皆是。相比之下,本书倒并不是以此为核心月标的。但是,可曾有哪位读者看到任何 The annotated stl Sources I STL源码剖析 夲书像本书一样,将红黑树用一张张清晰生动的图解释得如此浅显易懂?所谓一图胜千 言,在教授基本数据结构与算法方面,我想不出还有任何一种方法,能够比幻灯般的图 片更生动更令人印象深刻了。读过此书的每一位读者,我想都会为书中那一幅幅插图所 打动,作者细致严谨的作风,时刻为读者考虑的敬业精神,也许是值得我们尊敬的东 西。我非常荣幸有机会与侯先生和华中科技大学出版社的周筠女士再次合作,担任了这 本书的繁简转译工作。在术语转译方面,我们基本上保持了与《 Effective c++中文版》 相一致的标准。其中有一些术语不完全符合国内的习惯译法,下面是一个简单的对比表 英文术语 大陆惯用译法 本书译法 adapter 适配器 配接器 argument 实参(实质参数)引数 by reference传参考,传地址 传址 by value 传值 传值 dereference反引用解参考 提领 evaluate 评估计算 评估,核定 instance 案例,实例 实体 instantiated|实例化 实体化、具现化 librar 库函数库 程序库 range 范围 区间(使用于STL时) resolve 解析 决议 parameter形参(形式参数)刂参数 t 类型 型别 侯先生在一篇影晌頗为广泛的STL技术杂文中,将STL的学习境界划分为三个阶 段:会用,明理,能扩展。阅读STL源码是由第层次直贯第二层次,而渐达于第三层 次的一条捷径,当然也是一条满是荆棘之路。如果你是一个勇于征服险峰的程序员,如 果你是一个希望了解 under the hood之奥秘的程序员,那么当你在攀登SL这座瑰丽高 山的时候,这本书会大大地帮助你。我非常热情地向您推荐这本着作。当然,再好的书 籍也只是工具,能不能成功,关键,还在你自己 孟岩 2002年4月于北京 The annotated stl sources 庖丁解牛·侯捷自序 庖丁解牛 侯捷自序 这本书的写作动机,纯属偶然 2000年下半年,我开始为计划中的《泛型思维》一书陆续准备并热身。为了 对泛型编程技术以及STL实现技术有更深的体会,以便在讲述整个STL的架构与 应用时更能虎虎生风,我常常深入到STL源码中去刨根究底。200l年2月的某 天,我突然有所感触:既然花了大把精力看过STL源码,写了眉批,做了整理, 何不把它再加一点功夫,形成一个更完善的面貌后出版?对我个人而言,一份批注 详尽的STL源码,价值不菲;如果我从中获益,一定也有许多人能够从中获益 这样的念头使我极度兴奋剖析大架构本是侯捷的拿手,这个主题又可以和《泛 型思维》相呼应。于是我便一头栽进去了 我选择 SGI STL作为剖析对象。这份实现版本的可读性极佳,运用极广,被 选为GNUC++的标准程序库,又开放自由运用。愈是细读 SGI STL源码,愈令 我震惊抽象思维层次的落实、泛型编程的奥妙,及其效率考虑的缜密。不仅最为人 广泛运用的各种数据结构( data structures)和算法( algorithms)在STL中有良好 的实现,连内存配置与管理也都重重考虑∫最佳效能。一切的一切,除了实现软件 积木的高度复用性,让各种组件( components)得以灵活搭配运用,更考虑了实用 上的关键议题:效率 1庄子养生主:“彼节者有间,而刀刃者无厚:以无厚入有间,恢恢乎其于游刃必有余 地矣.”侯捷不让,以此自况 The Annotated stL Sources STL源码剖析 这本书不适合C++初学者,不适合 Genericity(泛型技术)初学者,或STL初 学者。这本书也不适合带领你学习面向对象( Object Oriented)技术是的,STL 与面向对象没有太多关联。本书前言清楚说明了书籍的定位和合适的读者,以及各 类基础读物。如果你的 Generic Programming/STL实力足以阅读本书所呈现的源码, 那么,恭喜,你踏上了基度山岛,这儿有一座大宝库等着你。源码之前了无秘密 你将看到 vector的实现、iist的实现、heap的实现、 deque的实现、RB-tree 的实现、hash-tab1e的实现、set/map的实现:你将看到各种算法(排序、搜寻 排列组合、数据移动与复制…)的实现;你甚至将看到底层的 memory pool和高 阶抽象的 traits机制的实现。那些数据结枃、那些算法、那些重要观念、那些编程 实务中最重要最根本的珍宝,那些蜇伏已久仿佛已经还给老师的记忆,将重新在你 的大脑中闪闪发光 人们常说,不要从轮子重新造起,要站在巨人的肩膀上。面对扮演轮子角色的 这些STL组件,我们是否有必要深究其设计原理或实现细节呢?答案因人而异 从应用的角度思考,你不需要探索实现细节(然而相当程度地认识底层实现,对实 务运用有绝对的帮助)。从技术研究与本质提升的角度来看,深究细节可以让你彻 底掌握一切:不论是为了重温数据结构和算法,或是想要扮演轮子角色,或是想要 进一步扩张别人的轮子,都可因此获得深厚扎实的基础。 天下大事,必作于细 参观飞机工厂不能让你学到流体力学,也不能让你学会开飞机。然而如果你会 开飞机又懂流体力学,参观飞机工厂可以带给你最大的乐趣和价值 The Annotated stl sources 庖丁解牛·侯捷自序 我开玩笑地对朋友说,这本书的出版,给大学课程中的“数据结构”和“算法” 两门授课老师出了个难题。几乎对所有可能的作业题目(复杂度证明题除外),本书 都有了详尽的解答。然而,如果学生能够从庞大的 SGI STL源码中干净抽出某一部 分,加上自己的包装,做为呈堂作业,也足以证明你有资格获得学分和高分。事实上, 追踪一流作品并于其中吸取养分,远比自己关起门来写个三流作品,价值高得多 我的确认为9999%的程序员所写的程序,在 SGI STL面前都是三流水准② 侯捷2002/0330新竹·台湾 http://www.j]hou.com(繁体 http://j]hou.csdn.net(简体 j3hou@jjhou.com pS.以下三本书互有定位,互有关联,彼此亦相呼应。为了不重复讲述相同的 内容,我会在适当时候提醒读者在哪本书上获得更多资料: ●《多态与虚拟》,内容涵括:C++语法、语意、对象模型,面向对象精神, 小型 framework实现,OOP专家经验,设计模式( design patterns)导引 《泛型思维》,内容涵括:语言层次(C++ templates语法、 Java generic语法 C+◆操作符重载),STL原理介绍与架构分析,STL现场重建,STL深度 应用,STL扩充示范,泛型思考 ●《STL源码剖析》,内容涵括:STL所有组件之实现技术和其背后原理解说 The annotated stl sources 刖百 XVIi 前言 本书定位 C++标准程序库是一个伟大的作品。它的出现,相当程度上改变了C++程序 的风貌以及学习模式1。纳入STL( Standard Template Library)的同时,标准程序 库的所有组件,包括大家早已熟悉的 string、 stream等等,亦全部以 template覆盖 过整个标准程序库没有太多的OO( Object Oriented),倒是无处不存在GP( generic Programming C++标准程序库中隶属STL范围者,粗佔当在80%以上。对软件开发而言 STL是尖甲利兵,可以节省你许多时间。对编程技术而言,STL是金柜石室 所有与编程工作最有直接密切关联的一些最被广泛运用的数据结构和算法,STL都 有实现,并符合最佳(或极佳)效率。不仅如此,STL的设计思维,把我们提升到 另个思想高点,在那里,对象的耦合性( coupling)极低,复用性( reusability 极高,各种组件可以独立设计又可以灵活无罅地结合在一起。是的,STL不仅仅是 程序库,它其实具备 framework格局,允许使用者加上自己的组件,与之融合并用, 是一个符合开放性封闭( Open-Closed)原则的程序库 从应用角度来说,任何一位C++程序员都不应该舍弃现成、设计良好而又效 率极佳的标准程序库,却“入太庙每事问”地事事物物从轮子造起 那对组件技 术及软件工程将是一大嘲讽。然而,对于一个想要深度钻研STL以便拥有扩充能力 1请参考 Leaning Standard c++ as a New language, by Blame stroustrup,CC+Uers Journal19905中译文htp/www.jjhou.com/programmer4learning-standard-cpp.htm The Annotated stL sc STL源码剖析 的人来说,相当程度地遑踪STL源代码是必要的功课。是的,对于个想要充实数 据结构与算法等固有知识,并提升泛型编程技法的人,“人太庙每事问”是必要的 态度,追踪STL源代码则是提升功力的极佳路线。 想要良好运用STL,我建议你看《heC++ Standard Library》 by Nicolai M Josuttis;想要严谨认识STL的整体架构和设计思维,以及STL的详细规格,我建 议你看《 Generic Programming and the s》 by Matthew H. Austern;想要从语法层面 开始,学理与应用得兼,宏观与微观齐备,我建议你看《泛型思维》by侯捷;想要 深入STL实现技法,一窺大家风范,提升自己的编程功力,我建议你看你手上这本 《STL源码剖析》一一事实上就在下笔此刻,你也找不到任何一本相同定位的书2 合适的读者 本书不适合STL初学者(当然更不适合C++初学者)。本书不是面向对象 ( Object Oriented)相关书籍。本书不适合用来学习STL的各种应用。 对于那些希望深刻了解STL实现细节,从而得以提升对STL的扩充能力,或 是希望藉由观察STL源代码,学习世界一流程序员身手,并藉此彻底了解各种被广 泛运用之数据结构和算法的人,本书最适合你 最佳阅读方式 无论你对STL认识了多少,我都建议你第一次阅读本书时,采取循序渐进的 方式,遵循书中安排的章节先行浏览遍。视个人功力的深浅,你可以或快或慢并 依个人兴趣或需要,深入其中。初次阅读最好循序渐进,理由是,举个例子,所有 容器( containers)的定义式一开头都会出现空间配置器( allocator)的运用,我可 以在最初数次提醒你空间配置器于第2章介绍过,但我无法遍及全书一再一再提醒 你。又例如,源代码之中时而会出现一些全局函数调用操作,尤其是定义于 stl construct h>之中用于对象构造与析构的基本函数,以及定义于 2 The C++ Standard Template library, by P.J. Plauger, Alexander Al Stepanov, Meng Lee, David r. Musser, Prentice hall2001/03,与本书定位相近,但在表现方式上大有不同 The Annotated sfL sot

...展开详情
试读 127P STL源码剖析高清完整版.pdf
立即下载 低至0.43元/次 身份认证VIP会员低至7折
抢沙发
一个资源只可评论一次,评论内容不能少于5个字
  • 签到新秀

    累计签到获取,不积跬步,无以至千里,继续坚持!
关注 私信 TA的资源
上传资源赚积分or赚钱
最新推荐
STL源码剖析高清完整版.pdf 50积分/C币 立即下载
1/127
STL源码剖析高清完整版.pdf第1页
STL源码剖析高清完整版.pdf第2页
STL源码剖析高清完整版.pdf第3页
STL源码剖析高清完整版.pdf第4页
STL源码剖析高清完整版.pdf第5页
STL源码剖析高清完整版.pdf第6页
STL源码剖析高清完整版.pdf第7页
STL源码剖析高清完整版.pdf第8页
STL源码剖析高清完整版.pdf第9页
STL源码剖析高清完整版.pdf第10页
STL源码剖析高清完整版.pdf第11页
STL源码剖析高清完整版.pdf第12页
STL源码剖析高清完整版.pdf第13页
STL源码剖析高清完整版.pdf第14页
STL源码剖析高清完整版.pdf第15页
STL源码剖析高清完整版.pdf第16页
STL源码剖析高清完整版.pdf第17页
STL源码剖析高清完整版.pdf第18页
STL源码剖析高清完整版.pdf第19页
STL源码剖析高清完整版.pdf第20页

试读结束, 可继续阅读

50积分/C币 立即下载 >