C++ STL中文版.pdf

所需积分/C币:50 2018-02-27 14:08:20 9.9MB PDF
62
收藏 收藏
举报

C++ STL中文版对C++ STL进行了全面而深入的阐述。STL(标准模板库)是在惠普实验室中开发的,已纳入ANSI/ISO C++标准。其中的代码采用模板类及模板函数的方式,可以极大地提高编程效率。本书由P.J. Plauger等四位对C++ STL的实现有着卓越贡献的大师撰写,详细讨论了C++ STL的各个部分。 C++ STL中文版分为16章,其中的13章通过背景知识、功能描述、头文件代码、测试程序和习题,分别讲述了C++ STL中的13个头文件,其他章节介绍了STL中广泛涉及的三个主题--迭代器、算法和容器。本书附录列出了接口和术语表,最后列出了参考文献。本书适合对C++有一定了解的
TP312 860 深入G+系列 ++STL中文版 P.J. PLAUGER ALEXANDER A. STEPANOV MENG LEE DAVID R. MUSSER 王昕译 北方工业大学图书馆 00516481 中图电力出照 内容提要 本书对C++STL进行了全面而深入的阐还:STL(标准模板库)是在患普实验室中 开发的已纳入 ANSHISOC+标麀。其卞的代码用穫板类及蜓板函夔的方式,可以极 大地提有编裡效率,本书由P, Play等四位对C+轴实现有着卓越贡献的大师撰 写,详细讨论了C艹$的各个部分:全书分为16章,其中的13章遥过背景知识、功 能描述、头文件代码、测式程序和习题,分别讲述了C++!T,中的13个头文件,其他章 节介绍了STL中厂泛涉及的三个主题一迭代器、算法和容器。本节附录列出了按口和术 语表,最后列山了参考文轼 本书适合对C艹+有一定了解的程序员及高院校师生误。 图书在版编自(CIP)数据 C++I中文版/(美)普劳格( PJ Plauger)等著;工昕译 北京:中国电力出版社,20025 ISBN75083-I058-6 C,,Ⅱ.①普.②.,IC语言程序设计ⅣTP312 中国版本图书馆C数据核字(2002)第028461号 著作权合同登记号图字:01-20020709号 本书英文版原名:TheC+ Standard Template Libra Published by arrangement with Prentice- Hal, InG. Af rights reserved 本书由美国培生集团授权出版 中国电力出版社出版、发行 北京堕河路6号10m4http:/www.infspower.comcn 北京地矿印刷厂印刷 各地新华书店经售 2m午5月第版20午5月北京第二次印刷 7g7号米x10毫米16开本35印张7千字 定价0元 版权所有翻即必究 本书如有印装质量问趣,我计发行部负责退换冫 译者序 众所周知,C++是一门功能强大的编程语言,支持多种编程典范( paradigm),其 间包括PB( Procedure- Based)、OB( Object-Based)、oo( Object-Oriented)以及新近 出现的GP( Generic Programming)。 作为GP的第一↑广为流传的实现,STL( Standard Template Library)自被C+标准 化委员会接纳以来,已经对整个C++社区产生了极为深远的影响。程序员可以放心地使 用STL所提供的常用数据结构和算法,避免“每次都重新发明一个轮子”的情况出现, 有效地提高编程效率:再者,为了充分利用STL已有的资源,C++!SL( Standard Library) 的实现方式也有了很大的变化,一些常用的组件(如: IOStream、 stong等)都提供了和 STL交互的接口 随着STL在C++社区的逐浙普及,对于SIL的教学也开始变得红火起来。在国外, 早在1995年,就有 Alexander a. Stepanov(STL之父)和 Meng Lcc(Sm的第一个实现 者之-)的文章面世,19年更有 David r musser(GP理论的又一元老〕所著的《sL Tutorial and Reference Guide出版,之后更是出现了《TheC++ Standard library》( Josuttis 199、《 Generic Programming and the StL》( austen,199,木将中文版将由中国电力 出版社引进出版,详倩请访问:htp:/www.infopower.cuiil.cn)、EffectiveSTl》(Meyers, 2001)、《TheC++ Standard Template Library》( Plauger等,2001)等大师级的作始。 而反观国内,在2000年前,市面上讲述标准C++的书籍寥寥无几,而讲述STL的 书籍更是有如凤毛麟角。这使得绝大多数C+程序员对最新的 ISOJANSI C++为开发提 供的强大支持缺乏必要的了解,导致了诸如list、 binary_ search等常见数据结构和算法的 重复实现,造成了人力物力的浪费。这不可不说是国内C++教学的失败。 但是,从2001年开始愽况有所好转。国内一些ANⅠC++学了的先行者开始在网络上 向大家介绍 ISOANSI O++的一些新特性,以使国内的C++学能够跟得上C++社区的最 新发展,这其中自然少不了对STL的介绍。在这段时期内,出现了一些以ANSC+为主 题的网站,如:STL小组(hpw. smiling comc/group homepage. ecgi?group_ids=11916 dimensions网站(htp:/www.dimension5,org),还有csdn(htp:/www.csdn.eet>讨论区 的CC+板块等。另外:国内的各家出版社也开始有目的从国外引入一些大师的菩作〔如 我上面提及的四本大师级著作都将在近期出版中文评木,以更快地让国内的读者接触到 来自国外主流的声音。 机缘巧合之下,我有幸从中国电力出版社得到了翻译由P. Plauger、 Alexander A. 译者序 Stepanov、 Meng Lee和 David r. Musser四位大师所著的“TheC++ Standard Template Library》·书的机会,从而得以更早地接触到大师们的言论。作为本书的译者,我自必 要介纪一下四位作者的身份,以加重本书的砝码(古人有云:不看僧面看佛簡,量然我 人轻方徽,但这四人在国外可都是响当当的人物哦@作为本书第一作者的PJ. Plauger, 对于国外CC++社区来说可是一个如鐳费耳的名字,他所著的《 The standard C Library 等书都早已成为经典著作,并且,目前使用人数最多的C+編译器(MsVC++)中自带 的STL就是出自他手,其实力可见一斑。第二作者 Alex Stepanov,则更是不得了,听听 别人都叫他仁么:GP之父!唑……,STL就是出自他那天才的思想,并且他还身休力 行,连同本书的第三作者一 Meng Leer,实现了STL的第一个实现(HP$TL)。而木书 的第四作者 David musser,作为 Stepanov的最初且时间最长的合作者,对GP理论的形 成也称得⊥是功不可没。 由于 P. Plauger亲自实现了一个商业化的S版本,那么作为讲述Sm实现的本 书来说,则更显得意义菲凡了。風说,只要轮子好用就可以不用去管轮子是怎么做出来 的,但适当地∫解一些轮子制作过程中的知识,肯定可以帮助我们更好地使用这个轮子 在本卡中, Plauger把STL分成不同的部分,一个一个头文件地给我们讲还每一部分是 如何旅出来的,我们该如何去使用它们,然后给出了测试这些组件的完整代码,最后为 了让读者加擦对STL的理解,更是给出了一些颇具挑战性的习蘸[出于这些习题具有 定的参考价值,所以我们可能会在C+ew(htp:ww.c-vew.org/)杂志上逐步对这些 习题的解法给出一些讨论以及自己的方案,以方使大家对于ST的理解,]从某种意义 上来说,木书甚至可以玫名叫做《SIL从入门到精通》。不过,金无足赤,本书也存在 着…些小小的问题,因为是为了向读者展示一个简单的STL实现,本书给出的代码在不 间程度上存在着异常安全性的间题异常安全性,始终是C++中的一个难点所在,目前对 于这方面的最好探讨可以参见 Herb sutter所著的《 Exceptional C++》〈 Sutter,199,本 书中文版将在近期内由中国电力出版社引进出版)或GotW网站(hp:/wW. gotw.ca)] 币且在不少地方的做法与现有的C+标准稍有出入这也可能是扌于VC++对于C++标 准的支持不足的缘故吧):另外可能是最重要的一点是,本书对于读者的要求比较高, 它假定读者对C+中的些比较高级的用法都有所了解,虽说我在翻泽过程中尽量对这 些地方给出一些注释,但这依然会使读者产生-些困惑(幸好据小道消息透露,最近国 内应该会出版很多有关C+的经典著作,因此这个问题在一段时期后也就自然会不成为 闷题了)。 最后,对于本书中文版的店现,我想感谢以下几个人,首先当然是本书的作者P Plauger等人,感谢他们给我们带来了如此好的一本书,在翻译过程中,我普经就书中的 些问题和 Plauger互通过几次cmai,更正了原书中的一些错误:另外就是来自于 hrainbench的 Andrei iitchenko,对于本书代码蜊异常安全性问题,就是牠在 comp. lang.c+, moderated提出来的:然后就是中国电力出版社负责该书编辑的刘江先 详者序 III 生、关敏女士、宋宏女士以及參与此书中文版出版的全沐员工,感谢他们绺予我札会翻 译此书并最终版:再接下来就是讪,没有他的帮助,我也不会那么早就开始学习 STL;最后我要感谢的就是经常在网上和我讨论IO/ANSⅠC+以及STL的朋友们,句 括 babysloth、加ugn、myan等人,和他们的讨论也使得我对STL有了更深层次的理解 另外,如果对本书有仼句疑问的话,可以与我联系,我的enai是:cber@email.com.cn 王昕 2002年5月 序 标准模板库( Standard Template Library,简称STL)是ANSI/so C艹语言的库的一个主耍组成部分。它最初是惠普实验室 Hewlett-Packard labs)的产物,开发者为 Alexander Stepanov及Meng Lee(参见S&L95),主要基于早期的、由 Stepanov和 David R Musser 两人完成的工作。(参见M&S7、M&89及M&894。这里所有参考文 献都列于本书后的“参考文献”中。)你将会发现在这个库中包含着对 于C+中的模板( template)的各种使用,其中大部分的使用都值得炫 耀,并且具有良好的连贯性。确实,STL已经开始有意义地改变着许多 程序员编写C++代码的方式 本书展示了怎样使用STL中提供的模板类( template class及模板 函数( template function),一如C+标准中所要求的一样(参见条款20 及23-26)。我们在此将ST视为标作C+所定义的庞大的库中一个 相对独立的子集。C+中库的设计与 ANSI/SO标准C(AN89与KO90 中的库设计一脉相承。因此,也可以将本书视为 P.I. Plauger先前的两本 书, The Standard C library(門092)与 The draft Standard C+ Library (P95)的一个后续版本。几乎所有C++程序员感兴趣的有关库的内容 都可以在这二本书中找到。 C++标准 1998年,C++标准正式通过,并且将在接下来的一段时间中保持 种稳定的状态它既是ANSI标准,也是ISO标准,也就是说,它既是 美国的国家标准,也是一种全球通用的标准。作为标准化进程的一部分, 整个标准C十语言及库第一次完整地描述在一起。一个相对较晚加入这 个标准化进程的事件是在C++标准的草案中接纳STL为C++标准的一郃 分。现在,标难C十+的编译器及库的各种实现不过刚刚出现。也就是 说,即使是很有经验的C++程序员也将发规本书中有许多东西是全新的。 同样,在1994年6月被标准化委员会接纳为C+标准草案的一部 分之前,对SIL的早期描述(至少早于S&L95)仅限于一个相对狭窄 的范l内。在被核纳的过程中,STL本身又被重新组织井且在几个重要 的环节做了修改。现在,在标准C++的STL己经不再是由惠普实验笙 开发出来的那套软件开发包:同时它与那些由不同的代理提供的强化版 ①)一臌的标准化文栏在正式通过后的5仨內将保持一种稳定的状态,期间即使需要对它进行修改,也 要等刹5年后再提交给标准化委会进行表决,一泽者岩 序苦 本也不同。这乜就忌说,即使是那些有着巨期的STL使用经验的柱序员 也可以从本书中获稈新的知识。你将会在本书中发现对STL的完氅描 述,-如在C十标柱中指定的那样 本书中还将至少告诉栋一种实现STL的方法。书中提供了大概6000 行经过测试,证明可行的代码,同时这些代码想被证实可以移植到许多 C艹+编译器上。实际上,这些代码在本质上和 Microsoft visual C++、IBM Visual Age或其他商所提供的C+编译器中的SrL代码几乎是相同 的。我们仅仅是在排版及符号表达方面做了小小的改动,以使得这代 码在书中更具有可性,同时将它们用来作为教学示例也比较方便 作为对C+库的扩展:书屮捉供的这些代码可以工作于任何其他 C十库上面(参见附录A)。然而,当与一个完全符合C++标准的库一起 工作时,它表现得尤为出色。我们尽可能地去除了那些不具有可移植性 或不可能被广泛利用的代码。那些过分依赖于C+语言中最近才加入的 特性的代码,如模饭的幕分特化( template partial specialization)等,有 可能在一些編译器上导致问题的产生。你也可以在那些商业化的STL版 本中发现对于这些恃殊情况的各种不同的折衷处理 无论如何。你都可以通过使用本书中提供的代码,获得-一些对于如 何使用由模板构成的库的宝贵经验,而使用模板库也已经开始成为C++ 世界中的一个重要标准。同样重要的是,我们相信看完一个实际的TL 实现将有助于你更妃她理解和应用它 这就引入了水书的另一个目的,除了给出STL的标准,以及实现它 的可行代码之外,本书还可以作为一本如何使用该库教程。你将发现 在本书中存在着一些有用的背景信息,告诉你STL是如何滨变成现在的 这个版本的,使用它意味着什么,以及何使用它。为此并不需要阅读 和理解我们所提供的所有代码。哪怕是对于本书的粗略学习,也能给你 带来不少有益的收获。不需要是老手才能从本书中获益,那些偶尔才显 得比较老练的程序员将会发现这里所提供的信息直就是无价之宝 本书钓目的不是教你如何写C++代码。我们假定你已经了解了足够 多的C+知识,已经可以看懂简单的C++代码。虽然在本子中出现的代 码并不是那么简单,但不要怕,我们会解释其间所使用的各种技巧 扩展STL 木书的最终目的就是告诉程序员如何设计及实现对STL的扩展。 STL集合了大量的算法、数据结构以及编程技巧。然而,它并没有提供 程序员可能需要的仝部特性。相比而吉,它只是提供∫那些核心的、破 广为使用的特件,并且描述了这些核心代码的编写规则 当你掌操了这些规则后,就可以往STL中添加囱己的算法,并丑让 它与已有的数据结构一同正常地工作。你也可以添加自己的数据结构 使之与己有的算法协同工作。選过将本书中提供的STL代码作为例来 序言 IID 使用,你将很快学会如何以最少的新增代码来处理新的问题,并且发现 这些新增的代码可以在以后的项目中重用。这也就是设计库的最终原 本书的结构 本书的结构看起来更像是STL代码本身的结构。C++标准中列出了 大量的头文件,但只有其中的3个头文件中定义了SmL中所有的模板。 这13个头文件约每一个在本书中都有对应的一章。其他的章节则全面 地介绍了STL,并讨论了STL中三个涉及较为广泛的主题—迭代器 iterator)、算法( algorithm)和容器( container)。这些头文件中的大 部分都有着适量的相关内容,囚此也就引起了一些相关的讨论。有关它 们的相关章节必然会导致讨论范围的扩大。 每章都以相同的模式讲述了一个头文件。一开始是一个简短的背景 介绍小节,接着就是有关这个头文件内容的功能性描述,然后是对于如 何更好地使用该头文件中提供特性所给出的一些建议。再接着给出了 组成买文件的C++代码,并伴随有代码是如何工作的有关注释。我们还 为每一个头文件给出了一个小小的测试程序,绮出至少个粗略的例子 演示每一个定义的模板是如何使厍的 在每一章的最后给出了一些习题。如果本书是作为某个大学课程的 误本话,这些习题可以当作家庭作业来完成。大部分习题都是简单的 练习,例如使用库,或是代码重写等。它们能够使人理解实现中的某些 重点,或是展小了实现中的一些合理变更。那些较难的习题都标注出来 了,它们可作为一个更大范鬧的项目的基础。那些自学本书的人可以将 这些习题作为种锻炼,以激发更多的息考。 代码 本书中提供的代码以及对这些代码的播述都是基于惠普公司被广 泛使用的STL版本这个版本包括如下的声明 Copyright@ 1994 by Hewlett-Packard Company Permission 10 use, copy, modify, distribute, and sell this software and its documentation for any purpose is hereby granted without fee, provided that the above copyright notice appear in all copies and that both that copyright notice and this permission notice appear in supporting documentation. Hewlett-Packard Company makes norepresentations about the suitability of this software forany purpose. It is provided as is without express implied warranty

...展开详情
试读 127P C++ STL中文版.pdf
立即下载 低至0.43元/次 身份认证VIP会员低至7折
一个资源只可评论一次,评论内容不能少于5个字
yasaka 太模糊了,伤眼睛!
2018-04-22
回复
您会向同学/朋友/同事推荐我们的CSDN下载吗?
谢谢参与!您的真实评价是我们改进的动力~
上传资源赚积分or赚钱
    最新推荐
    C++ STL中文版.pdf 50积分/C币 立即下载
    1/127
    C++ STL中文版.pdf第1页
    C++ STL中文版.pdf第2页
    C++ STL中文版.pdf第3页
    C++ STL中文版.pdf第4页
    C++ STL中文版.pdf第5页
    C++ STL中文版.pdf第6页
    C++ STL中文版.pdf第7页
    C++ STL中文版.pdf第8页
    C++ STL中文版.pdf第9页
    C++ STL中文版.pdf第10页
    C++ STL中文版.pdf第11页
    C++ STL中文版.pdf第12页
    C++ STL中文版.pdf第13页
    C++ STL中文版.pdf第14页
    C++ STL中文版.pdf第15页
    C++ STL中文版.pdf第16页
    C++ STL中文版.pdf第17页
    C++ STL中文版.pdf第18页
    C++ STL中文版.pdf第19页
    C++ STL中文版.pdf第20页

    试读结束, 可继续阅读

    50积分/C币 立即下载 >