C++标准程序库(中文版).pdf

所需积分/C币:9 2016-01-21 13:19:08 12.44MB PDF
0
收藏 收藏
举报

C++标准程序库(中文版)_扫描.pdf 含目录
巨细靡遗共然有序(侯趟译序) 巨细靡遗井然有序 (侯捷译序) 自从19}华C++ Standard定案以后,C++程序库便有了大幅扩充。原先为大 冢所熟知、标准规格定案前酝岷记久的SL! Standand Template library,栎准模板 程序厍〕,不再被咩独对待,而是被纳入整个C++标准程序库( Staudard library) 同时,原有的程序库(如 iostream)也根据泛型技术( geneses)在内部做了很大的 修改。可以说,C+ Standar的发布对C++社群带来了翻天覆地的大变动不是 来自语言本身,而是来自标准程序库。这个变动,影响C++程序编写风格至巨, C++之父助 me Stroustrup并因此写了一篇文章: erming Standard C+- as a neu anguage(载于CC++ User' s Joumal,199/05)。 我个人于1998年开始潜心研究泛型技术和STL,本书英文版《TC++ Standard Lray》甫一出版便成为我学习C++标准程序库的最重夏案头工具书之一。小有 心得之后,我写过数篇相关技术文章,从来离不开本书的影响和祸助。我曾经把 STL〔代表泛型技术目前最被广泛运用的一个成熟产品,是C艹标准程序库的 绝大成分)的学习比喧为三个境界(或层次): ●第一-境界:熟用STL ●第二境界:了解泛型技术的内涵与STL的学理乃至实作 ●第三境界:扩充STL 不论哪一个阶段,你都能够从本书获得不同程度的帮助。 第一阶段〔对最大多数程序员有立竿见影之效),我们餐要一本全面而详尽的 教稆,附带大量设计良好的范例,带领我们认识十数个STL容器( containers) 数十个STL算法( algorithms)、许许多多的选代器( 1teartors)、配接器( adapters 仿函数( functors)……的各种特性和用途。这些为教驚多的组件必狝经过良好的编 排组织和索引,才能成就一本效果良好、富教育性又可供长久查阅的案头工具书 上细鏖遗并然有序(候捷译序 在这阶救里,本书现极为优异。书中运用许多图表,对所有S组件的成 员做了极其详尽的整理。更值得称道的是书中交义参考( cross reference)做得非常 好,在许多关链地点告诉读者当下可参见哪章哪一节哪一页,对于阅读和学习带 来很大的帮助(本中文版以页页对译方式保留了所有交叉参考和索引)。 第二阶段〔从STL的运用晋升至泛型技术的学习),我们需要一些关键的STL 源代码(或伪码, pseudo code),帮助我们理解关键的数据结构、关键的编程技术 认识这些关健源代码(或伪码〕同时也有助提升第一阶段的运用深度(学会使用 样东西,却不知道它的道理,不高明@1 本书很多地方都捉供了C++标准程序库的关键源代码。不全面,但很关键。 笫_三阶段〔战为一位泛型技术专家;打造白己的SI.兼容组件),我们需要深 入了解STL的设计埋念和组织架构2,并深λ(且全面地)了解Sm实作手法3 是的,不入虎穴,不能得虎子;彻底了解STL如何被打造岀来之后,你才能写出和 sTL水交融、完美整合的白定义组件( user-defined components) 本书对第三阶段的学习也有相当帮助。虽然没能提供全面的STL源码并分析其 技术(那需要另外800页②),却提供了为数不少的订制型组件实作范例:p191,p213 提供了一个执行期指定排序准则并运用不同排序准贝的实例,p219提供了一个自定 义容器(虽然只是个简单的包装类别)·p22提供了一个“ reference语意”示范 作法,p285提供了个针对迭代器而设计的泛型算法,p288提供了一个用于关联 式容器的定制型 inserter,p294有一个自定的拌序准则,p14有一个自定的(安全 的)tack,p40有一个自定的(安全的) queue,p504有一个自定的 traits class for string,p6l4有一个自定的 stream操控器,p663有一个自定的 stream缓冲区,p735 有个自定的内存置器( allocator) 1这是乍见之下令人错愕的一句话。看电视震要先了鯉电视的原理吗?呵呵,话讲白了 就没意想」。这句话当然是对技术人员说的 2这方闺我推荐你看《 eneric Programing and the SIL- Using and Extending fhe c+ Standard Template Library》. by matthew h. Austen, Addison wesley1998详见稍后说明。 中铞本《泛型程序设计与STL》侯捷/黄侵尧合译,碁峰,200。 3这而栊推荐你看《ST源码剖桁析, Ifie Annotated sil Sources by侯捷,基峰,2002 详兕稍厅说明。 巨虾靡遗井然有序(侯捷译序) 除了众所暖日的STL,本书也涵盖了般不被归类为STL的 String程序库,以 及一般不被视为关的 iOStream和 Locale程序库4。部分矿有关连,以 IOStream 为主千。在GUI(图形使用接冂)利 applie- atioN raluewπk〔应用程序框架)当道 的今大, IOStream提供的输出输入可能对大部分人失去了价值,但如果你希望开拓 OO技术视野, IOStream是一颗沉睡的珠宝。 泛型技术不仅在C++被发扬光大,在Java上也有发展5,在C并上亦被众人期 待。从目前的势头看,泛型技术( Generics)或许是面向对象( Object Oriented)技 术以来程序编写方面的又一个巨大冲击。新代C++标准程序库昏将采月更多更复 杂具威力的泛型技术,提供给〔十+社群更多更好更具复用价值的组件 不论你要不奖、想不想、有没有兴趣在你的程序编写过程中直接用上泛型技术, 至少,在C++程序编写过程中你已经不可或缺丁泛型技术带来的成熟产品:C++标 准程序库。只要你具备C+语言基础,木书便可以带领你漂亮地运用C艹标准程 序库,漂亮地提升你的编程效率和程序品质。 面对陌生,程序员最大的障碍在于心中的怯懦。 To be or not to be, that is the question!不要像哈姆雷特-样犹豫不决。面对光明的技术,必须果敢 关于术语的处理,本书大致原则如下; 1.SIL各种数据结构名称皆不译,例如aray, ector..list, deque, hast tabl,map,set, sack, queue.tre.。虽然其中某些已有约定俗成的中文术语,但另一些没有 既标濯又被普遍运用的中文名称,强译之会令读者樘目以对,部分译部分不 译则阅读时词性平衡感不佳(例如“面对向量和 deque两种容器.”就不如 面对 vector和 deque两种容器”读起来顺畅)。因此,数据结构名称全 部不译。直接呈现这些简短的英文术语,可能营造更突出的视觉效果,反而 有利阅读。技术书籍的翻译不是为了建立全中文化阅读环境,我们的读者水 4这方面我见过的唯一专著是《 Staudard c++ iOStreams and locales-Atwe Programmer's aiud Reference ), by Angelika Langer and Klaus Krett. Addison Wesley 2000 5(1)G: A Gereri Jaza, by Philip Wadler, Dr. Dobb's Journal February 200 (2)jsr-0000I4:AddinggEneristothejauprogranuinyLanguagehttp:/jcpory/ aboutlavacommunityproccss/rcvicw/jsro14/index. html. 请参考htp/www.boost.ore,这个程序库据称将成为下代C+标准 巨纽麻遍然有序〔侯捷详序 平也不可能受制于这些英文单词a 2S∏六大组件的英文名称原打算仝部保留,但由于处处出现,对版面的中英 女比例形成视觉威胁.因此全部采用以下译名: container容器, algorithm算 法, iterator选代器, adapter配接器, functor仿函数7, allocator配置器。 3午何一个被保留的英文关键术语。其第一次(或前数次)出现时尽可能带上 中文名称。同样地,任何关键的中文术语,我也会时而让它中英并陈。 关于编排,本书原则如下 1,仝书按英文版页次编排,并因而得以保留原书索引。索引诃条皆不译。 2.中文版采用之程序代码字体( Courier new85)北文本字体(细明体95)小, 英文版之程序代码字体却比其文本字体大,且行矩宽。因此中文版有大篇 幅程序行表时,为保持和英文版页次相应,便会出现较多留白。根据我个人 对书籍的经验,去除这些留白的最后结果亦不能为全书节省五页十页;填满 每一处空白却丧失许多立即可享的好处,为智者不取②。 旦你从本书获得了对C+标准程序库运用层面的全盘掌握与实践经验之 后,可能希望对SL原理乃至实作技术做更深的研究,或甚至对泛型编程( Gener Prograrnming)产生无比狂热。在众多相关书籍之中,下面是我认为非常值得继续 进修的四本书 1. i: Prgramming and the STL- Using and Extending the C++ Standard Template Library>, by Matthew H Austern, Addison Wesley198本书第一篇(前 五章)谈论ST的设计哲学、序库背后的严密架构和严谨定义。其中对于 STL之异于一般程序库,有许多重要立论。其余部分(第二篇、第三篇)是 STL的完整规格(分别从 concepts的角度和 components的角度来阐述),并 附范例程序。 7原书大部分时候使用 function object(函数对象)词,为求简及突出,中文版全部 改用共另个名称fmor(仿函数)(见第8章详注) 巨细摩遗井然序(侯捷译序) 2.《S冮L源码剖析,"Ahat!sr" L Soures》by侯捷,荟峰,20.本书剖析 sTL实作技法,详实揭示并注释Sr六人组件的底层实作,并以公认最严谨 的scH( Silicon Graphics Inc.)SIL版本为剖析对象。附许多特彩分析图,对 于髙度精巧的内存配置策略、各种数捃绪构、各种算法、乃至极为“不可思 议的配接器( adapter)实作手法,都有深入的剖析。 3.《 Efectice STL》, by Scott Meyers, Addison Wesley200l。本书定位为ST的深 层运用。在深层运用的过程中,你会遇到一些难解的问题和效率的考虑,你 需要知道什么该做、什么该避免。本书提供50个专家条款。请注意,深层运 用和效率调校,可能需要读者先对底部机有相当程度的了解 4. AModren C++ Design,》 by Andrei Alexandrescu, Addison Wesley2001.将泛型 技术发挥刹淋漓尽致、令人月瞪口呆的一本书籍,企图将泛型技术和设计模 式( design patterns)结合在一起。是领先时代开创先河的一本书 ◆今心 本书由我和孟岩先生共同完成孟岩在大陆技术论坛以C+ oo/Generics驰名, 见解深隽,文笔不凡。我很高兴和他共同完成这部作品。所谓合译,我们两人对全 书都有完整的参与(而非你一半我一半的对拆法),最终由我定稿。本书同时发行 繁体版和简体版,基于两岸计算机术语的差异性,简体版由孟岩负责必要转换。 侯捷200205123于新竹 http://www.jihou.cor(繁体网站 http://jjhcu,csdnnet(简体网站) d jhouEjjhou.cmn(个人电f邮箱 孟岩译序 孟岩译序 r技术书籍市场,历来是春秋战国。一般来说,同一个技术领域单总会有那么 数本、十数本、甚至数本定位相似的书籍相互激烈竞争。其中会有…些大师之作 脱颖而出,面南背北,黄袍加身。通常还会有后来者不断挑战,企图以独到特色赢 得自己的一片天地。比如说在算法与数据结构领域, D,E Knuth的那套《 The Art of omputer Programmig》〉一至三卷,当然是日出东方,惟我独尊。但是他老人家的 学生 Robert Sedgewick凭着一套更贴近实用的《Agr加C》系列,也打出了自 已的一片天下,成为很多推荐列表上的首选。就C++应用经验类书籍来说, Scott Meyers的《 Effectice C++》称王称霸已经多年,不过其好友 herb sutter也能用本 Exceptiona C+》获得几乎并驾齐驱的地位。嗨,这不是很正常的事吗?技术类 书鐠毕竟不是诗词歌赋。苏轼一首“明月几时有,把酒问青天”,可以达到“咏中 秋者,自东玻西江月后,余词尽废”的程度,但怎么可能想象一木技术著作达到“我 欲乘风归去,又悉琼楼玉宇,高处不胜寒”的境界!谁能够写出一本技术书,让同 领域后来者望而却步,叹为观止,那才是大大的奇迹! 撚而,您手上这本《TheC+ Standard Library》,作为C+标准程序库教学和 参考类书籍的定音之作,已经将这个奇迹维持了三年之久。按照T出版界时钟, 三年的时间几乎就是半个世纪,足以锤炼又一传世经典! 1998年C++Sar通过之后,整个C++杜群面临的最紧迫饪务,就是学习 和理解这价标准给我们惜来的新观念和新技术。而其中对于C艹标准程序库的学 习需求,最为迫切。C艹第二号人物 Andrew Koenig曾经就C+的特点指出:“语 言设计就是程序库设计,程序库设计就是语言设计”1。C++ Standard对程序库所作 的巨大扩充和明确规蒞,实际上即相当于对C++语言的能力作了全面提升与扩展, 意味着你可以站在无数超一流专家的肩上,将最出色的思想、设计与技术纳入囊中 1“ Language design is library desigr, library design is language design”,參见 Andrew Konig, Barbara mot合著巛 Ruminations on c+》第25,26章标题。 孟岩译序 让经过T锤白炼的精美代码成为自u软件大愿的坚实基砒,可以说,对于大多数程 序员来说,标准C较之于“ARM时代”之最大进步,不是语言本身,而恰恰是 标准程序库,因此,我们可以想象当时人们对C++标准程序戽教学类书籍的企盼, 是何等热切! 方面是巴经标推化了的成熟技术,另一方面是方众期待的眼神,我们完全有 理由认为,历史上理应爆发一场鱼龙混杂的图书大战。它的典型过程应该是这样: 先是一批快刀手以迅雷不及掩耳盗铃之势2推出一堆歙财废纸,然后在漫长的唾骂 与期待中,大师之作渐渐脱颖而出。大浪淘沙,最后产生数本经典被人传颂。后虽 偶有新作面世,但波光点点已是波涧不兴。 然而,这一幕终没有在“C什标溎程序库教学亏参考书籍”领域内出现。时 至今日.中外技术书将巾场上这一领域内的书籍为数寥塞,与烨积如山的C++语 救学类书篇形成鲜明对比。究其原因,大概冇二,一是这个领域里的东西毕竞份 量太重,快刀手虽然善斩乱麻,对于C标准程序库这样严整而精致的目标, 时也难以下手。更重要的原因则怕是19年8月《heC++ Standard Library》间 世,直如横刀立马,震慑天下。自推出之日起至今,本书在所有关于C++标准程 序库的评论与推荐列表上,始终高居榜首,在 Amazon的销量排行榜上名列所有 C++相关书箱之最前列。作者仅凭一书面为天下知,成为号召力可与 Stan Lippman, Hurb sutter等“经典”C++作家比肩的人物。此书之后,虽然仍有不少著作,或深 入探讨标准程序库的某些组件,或极力护展标准库倡导的思想与技术,但是与《The ++ Stardard Library》持同一路线的书籍,再没有出现过。所谓泰山北斗已现,后 来者已然无心恋战。 J是有了这样的评论:“如果你只需要本讲述C+标准程序库和STL的书 籍,我推荐 Nicolai josuttis的《TheC+ Standard libran》。它是你能得到的唯 本全面讲述C+标准程序库的书。也是你能想象的最好的一本书。”这种奇异情 形在当今技术书坛,虽然不是绝无仅有,也是极为罕见 究竟这本书好到什么程度,可以获得这么高的评价 我正是带着这份疑问,接受侯捷先生的邀请,着手翻译这本经典之作。随着翻 译过程的推进,我也逐渐解开了心中的疑惑。在我看来,这本书的特点有四:内容 详实,组织严密,态度诚恳,深入浅出。 此处非笔误,而是大陆流行的一句“新俚语”,意思十分明显,就是“迅雷不及掩耳” 地“掩耳盗铃”。 孟岩译序 首先,作为本程序库参考手册,内賽详实伞面是一项基要求。但是,本书 在这方面所达到的高度可以说树立了一个典范。本书作者始就提出个极高的 日标,要帮助读者解决“使用c艹+标准程序库过程中所到的所有问題”。众所 周知,C++标准程序库是庞然大物,每一部分又有很精擦的思想和拉术,既不能有 所遗漏,又不能漫无边际地深入下去,何取何舍,何去何从,难度之大可想而知! 作者在大局上涵盖了¢艹+标准程序库的全部内容,在此基础上又对所有组件都进 行细致的、立体式的讲解。所谓立体式讲解,就是对于一个具体组件,作者首先从 概念上讲解其道理,然后通过漂亮的范例说明其用法,申明其要点,最后再以图表 或详解方式给纷考述。有如钱塘江潮,层层叠叠,反反复复,不厌其烦。读完 此书,我想悠会和我样感受冲击,并主完全体认作者付出的巨大心血。 C++标准程序库本身就是一个互人的有机整体,加上这本书的立体讲解方式, 前后组织和对应的工作如果做不好,很容易会使整部书显得散乱。令人钦佩的是, 这本书在组织方面极其严密,几无漏洞。相关内容的照应、交叉索引、前后对应 无一不娅理得妥普曼妙。整体上看,整本书就像一张大网,各部分内容之间组织严 谨,契合密切,却又头绪清晰,脉络分明,着实难能可贵。我在阅读和翻译过程中 常常诧异于其内容组织的精密程度,筒直像德国精杏机械一样分毫不差—后来才 想到,本书作者 Nicolai josuttis就是德国人,精密是德意志民族的性格烙印,真是 名不虚传! 说起德意忐民族,他们的另一个典型性格就是诚实坦率:这一点在这本书同样 有精彩的展现。身为C++标准程序库委员会成员,作者于C+标准程序库的理 解至深,不但清楚知道其优点何在,更对其缺陷、不足、不完备和不一致的地方了 如指掌。可贵的是,在这些地方,作者全不避讳,开诚布公,直言不讳,事实是什 么样新是什么样,绝不文过饰非,绝不含混过关。作为读者,我们不仅得以学到好 东西,而且学到如何绕开陷阱和障碍。一个最典型的例子就是对于 valarray的介绍, 作者先是清清楚楚地告诉读者,由于负责该组件设计的人中途退场,这个组件没有 经过细致的设计,最好不要使用。然后作者一如既往,详细介绍 valarray的使用 完全没有因为前面的话而稍微有所懈怠。并且在必要的地方将 valarray的设计缺陷 原原本本地指出来,让读者口服心服。读到这些地方,将心比心,我不禁感叹作者 的坦诚与无私,专精与严谨。 本书最具特色之处,就是其内容选取上独具匠心,可谓深入浅出。本书的目的 除了作为手册使用,更是一本供学习者阅读学习的" torial”(自学教本)。也就是 说,除了当手册查阅,你也可以捧着它一篇一篇地读学习,获得系统化的坚实知 识。一本枵兼作" tutorial"和" reference",就好像一字典兼作“作文指南”,没

...展开详情
试读 127P C++标准程序库(中文版).pdf
立即下载 低至0.43元/次 身份认证VIP会员低至7折
一个资源只可评论一次,评论内容不能少于5个字
上传资源赚积分or赚钱
    最新推荐
    C++标准程序库(中文版).pdf 9积分/C币 立即下载
    1/127
    C++标准程序库(中文版).pdf第1页
    C++标准程序库(中文版).pdf第2页
    C++标准程序库(中文版).pdf第3页
    C++标准程序库(中文版).pdf第4页
    C++标准程序库(中文版).pdf第5页
    C++标准程序库(中文版).pdf第6页
    C++标准程序库(中文版).pdf第7页
    C++标准程序库(中文版).pdf第8页
    C++标准程序库(中文版).pdf第9页
    C++标准程序库(中文版).pdf第10页
    C++标准程序库(中文版).pdf第11页
    C++标准程序库(中文版).pdf第12页
    C++标准程序库(中文版).pdf第13页
    C++标准程序库(中文版).pdf第14页
    C++标准程序库(中文版).pdf第15页
    C++标准程序库(中文版).pdf第16页
    C++标准程序库(中文版).pdf第17页
    C++标准程序库(中文版).pdf第18页
    C++标准程序库(中文版).pdf第19页
    C++标准程序库(中文版).pdf第20页

    试读结束, 可继续阅读

    9积分/C币 立即下载 >