您的浏览历史

STL扩展技术手册 卷I:集合和迭代器

促销活动
  • [本书]参加机械工业出版社华章公司满58元赠书活动

基本信息

编辑推荐

编写大部分的集合,并理解它们与容器的不同之处
掌握元素参考类别:定义它们,检测它们,并利用它们设计STL扩展集合和迭代器
与外部迭代器失效一起工作,并理解它对STL兼容集合的设计产生的令人惊讶的影响
适配现实世界的API,包括从文件系统遍历到分散/聚集I/O
使用独立迭代器类型,从简单的std::ostream_iterator扩展到复杂的过滤和转换类型或值的适配器

推荐阅读
疯狂的程序员(china-pub全国独家首发)..

市场价:¥35.00
4-5星价:¥26.95
[购买] [收藏]

内容简介回到顶部↑

本书以STLSoft为基础,广泛深入地论述了C++标准库STL的相关内容。全书共三部分43章,包括标准模板库、扩展STL、元素引用类别、DRY SPOT原则、抽象泄漏法则、契约式编程、约束、垫片、不完备结构一致性的发端、资源获取、模板工具、推断式接口适配、Henney假说、适配、遍历进程和模块、环境变量、字符串分词、聚集分散的I/O以及迭代器等内容。.
全书通过严谨的表述与丰富的示例,将概念和理论与实际的设计和代码结合起来,从而使读者既能深刻地理解STL的知识,又能熟练地掌握STL运用方法。
著名的C++专家Matthew Wilson在本书中展示了如何超越C++标准并扩展标准模板库(Standard Template Library,STL),进入包含API和非标准集合的更广阔的C++世界,以编写更有效、更有表达力、更灵活、更健壮的软件。
在本书中,Wilson使用自己创新的技术帮助读者掌握STL扩展特性,这体现在两个方面:将专用技术库和操作系统API适配为STL兼容的集合,并定义精密的迭代适配器,使STL潜在的效率和表现力得以实现。Wilson用实际的例子阐明了几个强大的概念和技巧,让你在连STL的创造者都未曾预见的方向上扩展STL,其中包括集合、元素参考类别、外部迭代器失效和推断式接口适配。
对于那些对STL知之甚微的C++程序员,本书将是宝贵的资源。它帮助你:
●学习STL扩展中特有的原则和技巧。
●通过查看STL扩展的内部实现,进一步学习STL。..
●学习实现封装的通用技术,在操作系统API和专用技术库之上实现封装。
●学习如何编写迭代器适配器,并理解其实现和使用上的限制及其背后的原理。
本书主要内容包括
●编写大部分集合,并理解它们与容器的不同之处。
●掌握元素引用类别:定义它们,检测它们,并利用它们设计STL扩展集合和迭代器。
●处理外部迭代器失效,并理解它对STL兼容集合的设计产生的惊人影响。
●适配实际的API,包括从文件系统遍历到分散或聚集I/O。
●使用独立迭代器类型,从简单的std::ostream_iterator扩展到复杂的过滤和转换类型或值的适配器。...

作译者回到顶部↑

本书提供作译者介绍

Matthew Wilson,Synesis软件公司的软件开发顾问,STLSoft和Pantheios库的创建者,《Imperfect C++》(Addison-Wesley)的作者。他曾是《C/C++ Users Journal》(C/C++用户杂志)的专栏作家,也是一些主要出版物的撰稿者,具有15年以上的C++经验。他拥有英国曼彻斯特大学博士学位,目前定居在澳大利亚。


.. << 查看详细

目录回到顶部↑

译者序.
前言
致谢
序言
编排体例
第一部分基础
第1章标准模板库
1.1核心概念
1.2容器
1.2.1序列容器
1.2.2关联容器
1.2.3存储空间的连续性
1.2.4交换
1.3迭代器
1.3.1输入迭代器
1.3.2输出迭代器
1.3.3前向迭代器
1.3.4双向迭代器
1.3.5随机访问迭代器
1.3.6成员选取运算符

译者序回到顶部↑

自从1998年9月C++标准定案以来,STL就作为标准库的重要组成部分,为广大程序员所熟知,也确实带来了巨大的便利。但作为一种兼顾系统编程和应用编程的语言,C++绝不可能局限于STL的象牙塔之中。只要面对的任务稍具现实性,我们就不可避免地要和所谓“遗产”API(应用程序接口)打交道。.
这些编程接口在过去若干年中积累而来,固然堪称宝贵财富,但有时候也会成为C++编程的沉重负担。
使用方式让人隐约感到暗合STL的概念,“集合”、“迭代”、“迭代器”的影子似乎触手可及,甚至就是另一种容器实现,但由于缺少所需的编译时接口,无法直接搭配STL算法和适配器。
经常采取显式资源管理,其传统的“分配—使用—释放”三部曲,在C++异常大行其道的今天,显得非常脆弱,往往给程序种下慢性病的病根——资源泄露。
几乎每个C++程序员都会面对以上问题。在形形色色的解决方案中,Matthew Wilson编写的STLSoft库可算是个中翘楚,其中包含大量适配代码,让这些传统API摇身一变,不仅可以方便地搭配STL使用,同时具备了异常安全性,让客户代码简洁、清晰、透明到令人吃惊的程度。STLSoft正是Matthew Wilson写作本书的基础,他在书中包含了十余个STLSoft组件,不厌其烦地讲解实现思路和方法,对比直接使用API和使用适配组件的代码,以极其直观的方式让读者体会到二者之间的差异。
熊掌有了,那么鱼呢?性能可算是每个C++程序员心中挥之不去的情结。放心,Matthew Wilson对此绝无含糊其辞、蒙混过关的企图,相反,他始终将组件的运行性能列为重要的设计目标。书中大多数组件都附有实实在在的性能基准数据,清楚地表明“抽象”和“高效”并非不可兼得。..
一部容量如此巨大的著作,如果全是罗列组件,讲解实现,未免显得匠气十足。而作者的过人之处在于一边埋头苦干,一边抬头看路,他将STLSoft实现代码背后的理念、观点、感悟也和盘托出。所以书中不仅随处散落着各种“提示”、“规则”、短小精悍的“插曲”,作者还以正式的篇幅讲解STL概念及扩展、元素引用类别、抽象泄露法则、鹅规则和鸭规则,讲解之后,又在书中频繁运用,让人很容易将抽象的概念、理论和实际的设计、代码相联系。十余个组件的设计固然精妙,其背后的思维方式尤其深刻,但看过这本书之后,能够以合理的方式在既有数据、算法之上抽象出STL扩展容器,或者深刻认识STL的概念、方法,为运用STL打下坚实的基础,才算是读者最重要的收获。
人生苦短。我们是否愿意在编写冗长繁复的代码之后,为更新、维护绞尽脑汁,或者在设计漏洞百出的资源管理机制后,为解决时隐时现的bug殚精竭虑;还是为一本好书全心投入,从此和简洁、高效、安全的代码结缘?答案不言而喻。...
译者
2008年3月

前言回到顶部↑

我的伯父John,是那种我父母一代所谓的男子汉。他强壮、粗犷、有点吓人,很有牛仔气概,而且他有勇气承认自己害怕,不像我只愿意述说自己的小失败。所以,当他说第二次跳伞的挑战是克服已知的恐惧,我记住了。我现在已经写了两本书,可以毫无疑问地证实这种相同的恐惧。开始第二次时,你知道有多少痛苦即将来临,这不是件能轻易做到的事。那么问题是,为什么我还这样做呢?.
其原因将在序言中阐述,总的来说,我试图对以下看似简单的两面性做出回应:
C++太复杂了。
C++是惟一足够强大,能满足我需要的语言。
这种两面性最突出的一个领域是,使用和扩展标准模板库(Standard Template Library,STL),尤其是扩展。本书(及其姊妹篇,卷2),是我在过去10年左右的时间内,为解决这一挑战性课题而积累的知识和经验的精华。
目标
本书描述了一个使用和扩展STL的好办法。书中定义了以下内容:
集合的概念,以及它和容器概念的区别
元素引用类别的概念,包括它的重要性如何,如何定义,如何检测,及其施加在STL扩展集合和迭代器设计之上的妥协
外部迭代器失效的现象,及其令人惊讶的行为对STL兼容集合设计的影响
一个能探测任意集合特性的机制,不论该集合是否提供变动性操作
书中说明了几个问题:
为什么变换迭代器适配器必须按值返回元素
为什么过滤迭代器必须总是输入一对迭代器来进行操纵
如果在迭代中,底层集合有改动,该怎么办
为什么你应该禁止输出迭代器类中无意义的语法,以及如何利用解引用代理模式做到这点
书中展示了以下方法:
将批量返回元素的API适配到STL集合概念
将逐个返回元素的API适配到STL集合概念
共享枚举状态,以正确实现输入迭代器概念的需求

序言回到顶部↑

难道每门语言都难免日趋复杂,并最终绊倒在复杂性的门槛上吗?.
—Adam Connor
难用的话,少用就是了。
—Melanie Krug
事物的两面性
3年前,《Imperfect C++》快要完工时,我跟编辑说起这本《Extended STL》,当时我信心满满地声称它会是一本易读易懂、且轻薄短小得可以轻松从两个抽象层之间滑过的小册子。此外我还保证会在半年之内写完。结果呢?在写这篇序言的时候,离当初约好的截稿日期已经过去了一年半有余,而且,本来计划好的一本薄薄的、约十六至二十个章节的小册子现在也膨胀成了两卷本,其中第一卷洋洋洒洒四十三个章节(含“插曲”章节),哦,对了,CD上还有三章呢…但话说回来,当初有一个保证现在仍然可以说是成立的,那就是这是一本对任何有一定C++经验的读者来说都轻松易懂的书。
为什么这本书后来的情况远远超出我当初的预计呢?并不是因为我是软件工程师——大家都知道软件工程师估计的工作量,乘三之后才是实际需要的时间。而是因为(我认为)以下四个重要的原因:
1.STL并不直观,花费可观的智力投资后方能熟练运用。
2.没错,STL在技术上功臻化境;没错,STL在内聚性方面超凡入圣。然而,STL前瞻性不够,对于在它那有限的概念定义之外的抽象,它并不能妥善应付。
3.C++语言本身是不完美的。
4.C++是一门难学的语言,但你得到的回报是效率,而且同时又并没有牺牲设计。
最近几年C++与时俱进,这一方面意味着C++变得非常强大,但另一方面也暴露出了其晦涩难懂的一面。如果你试着编写一个具有一定规模并用到模板元编程的模板库,那么一种可能是你将学到许多东西,并掌握了一个强大的工具;但同样也很可能的是你编写出的那堆东西除了C++狂热信徒之外谁也无法理解。
C++的使用精神本来就是扩展。除了很有限的一些应用是将C++看作“更好的C”来使用的之外,绝大多数C++使用都是围绕着类型定义(类、枚举、结构、联合)来进行的,而且这些自定义类型很大程度上被做成与内建类型界面一致。也正因为这个原因,C++中的许多内建操作符都是允许重载的。这样,一个vector,比如说,便可以重载operator[]来模拟内建数组的界面;再举个例子:任何可被拷贝(Copyable)的类型(一般)都定义(重载)了拷贝赋值操作符(operator=)。如此等等,不一而足。但由于C++的不完美、强大、以及极强的可扩展性,伴随而来的便是Joel Spolsky所说的抽象渗漏法则(the Law of Leaky Abstractions):“所有非平凡的抽象在某种程度上都是有漏洞的。”简单来说这句话就意味着要想顺利使用非平凡的抽象就必须对抽象下面的东西有所了解。
这也正是许多C++开发者重新发明轮子 的原因之一。其实这里的原因并不仅仅是众所周知的所谓“非我发明症”(NIH) ,而是因为我们常常发现自己所用的第三方组件除了百分之八十的功能是自己能理解并使用的之外,剩下的百分之二十往往裹着一团晦涩的黑气;造成后者的原因很多:复杂性、与既有概念或惯用法的不一致、低效、效率、范围局限性、设计或实现的不优雅、糟糕的编码风格等等。而且,编译技术现阶段的一些实际问题还会极大地加剧这种情况,尤其是遇到模板实例化过程中的错误消息时。
我觉得我之所以有资格写这本书,原因之一就是我花了大量的时间来研究并实现STL相关的库,而不是接受C++标准(1998)所指定的库或其他人写的库。而我决定写这本书的原因之一则是想将我在以上过程中学到的东西总结出来。如果你想要编写STL扩展,这本书可以为你提供帮助;而就算你只是想使用其他人写的STL扩展,这本书也同样有用,因为抽象渗漏法则决定了你很可能会不时需要掀开抽象这块幕布往里面瞧一瞧。
UNIX编程的原则
在《UNIX程序设计艺术》(Addison-Wesley, 2004)中,Eric Raymond总结了UNIX社群的最佳实践准则,这些准则来自大量不同的经验。在我们改装STL的宏大计划中,这些准则就像标灯一样为我们指明方向:
·清晰原则:清晰比巧妙重要。
·组合原则:设计能够互相连接的组件。
·多样性原则:质疑任何被声称为“真正唯一”的途径。

媒体评论回到顶部↑

“Wilson的STL大餐无疑是诱人的荚食,无论是对泛型编程的拥护者们,还是对正在开始接纳STL和C++的、殷切的C语言程序员们,或是正在重新看待C++的Java程序员们,以及为多种平台和语言开发软件库的作者们。祝大家胃口好!”.
——George Frazier,Cadence Design Systems,Inc.
“透彻论述了STL扩展中的细节和注意点。”
——Pablo Aguilar,C++软件工程师
“本书不仅论述了扩展STL,而且也扩展了我的C++编程思想。”
——Serge Krynine,C++软件工程师,RailCorp Australia
“你可能不是100%同意Wilson所说的一切,但总体上,他的书是对实用STL编程最有价值的、最深入的研究。”
——Thorsten Ottosen,M.C.S.,Boost贡献者
“Wilson是一个高明的驯兽大师,他让各式各样的第三方软件库,像驯服的野兽,跳过STL的火圈。他仔细地引导读者理解设计思想,指出陷阱,并确保你的脑袋没有被咬掉。”
——Adi Shavit,首席软件设计师,EyeTech Co.Ltd
“Wilson的书提供的信息,足以改变人们对STL扩展的焦虑或不确定程度,让其从‘胆怯畏缩’变为‘切实可行’。”
——Garth Lancaster,EDI/自动化经理,Business Systems Group,MBF Australia
“本书将打开你的眼界,并向你揭示STL抽象实际上有多么的强大。”..
——Nevin“:—)”Liber,19年的C++老手
“鲜有C++著作讲述扩展的技艺。而Wilson的作品,一贯地通过展示各种可行和不可行,以及其中涉及的权衡,将扩展的技艺推向极限。”
——John O’Halloran,软件开发主管,Mediaproxy
“基本的概念和实践,带领职业程序员超越标准库。”
———Greg Peet
“这本书不只是一本关于适应STL并用于日常工作的书,也是一次冒险旅行。它带你经历软件设计和概念、C++的强力技术,以及真实世界软件开发中的危险。换句话说,它是一本Matthew Wilson风格的书。如果你对C++的态度是严肃认真的,那我认为你应该阅读它。”...
——Bjorn Karlsson,主设计师,ReadSoft;《Beyond the C++ Standard Library:An Introduction to Boost》的作者

书摘回到顶部↑

第1章 标准模板库
  对STL的介绍本身就能写一本书,但我现在写的不是这样的书。介绍STL的书籍有很多(在参考书目中列举一些),我推荐您在阅读本书之前读读这方面的书。
  1.1 核心概念
  STL的核心是六个基本概念:容器、迭代器、算法、函数对象、适配器和分配器。
 ……
评论交流

共有16人开贴评论  17人参与评论  11人参与打分 查看

8人
 72%
用户平均打分
我要写评论 help如何参与评论和打分
3人
 27%
0人
 0%
0人
 0%
0人
 0%

FirstBlood

三级评论员
该会员在china-pub购买过此书
评价等级:  
发表于:2009-12-20 13:40:00
这本书的纸张。。。。。。是不是过分了点?
给出版社打0分。
您觉得呢? 送鲜花 (得0支)  扔鸡蛋 (得0个)

aca_jingru
二级评论员
  
发表于:2009-12-16 21:12:00
垃圾出版所---机械工业!!
您觉得呢? 送鲜花 (得0支)  扔鸡蛋 (得0个)

jeromewen

一级评论员
该会员在china-pub购买过此书
  
发表于:2009-10-14 10:04:00
纸质太差,需要精心照料.内容相当不错.
您觉得呢? 送鲜花 (得0支)  扔鸡蛋 (得0个)

ez_ing
一级评论员
该会员在china-pub购买过此书
评价等级:  
发表于:2009-9-13 9:32:00
那卫生巾印的么??
您觉得呢? 送鲜花 (得1支)  扔鸡蛋 (得0个)

codespy

三级评论员
该会员在china-pub购买过此书
评价等级:  
发表于:2009-2-19 20:34:00
此书的纸张确实软而薄,同样是400页的书,要薄出近三分之一,而且字还特别小!
另外,因为薄,所以纸张的通透性比较强,阅读时(与下一页)有重影的感觉!
所以只给出版社1分!
您觉得呢? 送鲜花 (得0支)  扔鸡蛋 (得0个)
我要写评论
查看所有评论交流(共16条)