Accelerated C++中文版通过示例进行编程实践

当前位置:首页 > 计算机网络 > 程序设计 > Accelerated C++中文版通过示例进行编程实践

出版社:科学出版社
出版日期:2012-7
ISBN:9787030341877
作者:(美)Andrew Koenig,Barbara E. Moo
页数:336页

章节摘录

版权页:   插图:   当我们说一个特定类型是一个迭代器时,实际上,我们是指关于这种类型所支持操作的性质;只有一种类型以某种特定的方式支持特定的操作集时,这个类型才会是一个迭代器。如果我们想要编写自己的find函数,那么从某种程度上说,我们将仅依赖于所有的迭代器都必须支持的操作。如果想要编写自己的容器——就像我们将在第11章中所做的一样——则必须提供支持了所有适当的操作的迭代器。 迭代器的概念并不是C++语言特有的一部分。但它是标准库组织的一个基本的组成部分,而且就是这一部分使得泛型函数跟这些概念一样有用。在这一章中,我们将出示一些示例来让您了解库是如何实现泛型函数的。沿着这个思路,我们解释了究竟什么是迭代器——或者更准确地讲,迭代器是什么,之所以这样说,是因为迭代器可以分为五个种类。 这一章比我们以前学习的所有章节更为抽象,这是由于本章中的泛型函数恰好具有抽象的性质。如果我们所编写的函数是用于解决特定问题的,那么这些函数将不会是泛型函数。但是您很快就会发现,我们所描述的大多数函数都是您非常熟悉的,这是因为我们已经在前面的示例中使用过它们了。此外,即使对于并不熟悉的函数,它们的使用方法也并不难想象。 8.1.1 未知类型的中值 实现泛型函数的语言特征被称作模板函数。模板允许我们为一个行为特性相似的函数族(或类型族)编写一个单独的定义,我们将族中各个函数(或类型)之间的差别归因于它们的模板参数的类型不同。本章中,我们将讨论模板函数,在本书第11章中,我们将探讨模板类。 隐藏于模板之后的关键概念是,不同类型的对象仍然可以享有共同的行为特性。模板参数允许我们按照共同的行为特性编写程序——即使在定义模板时我们并不知道与模板参数相对应的特定的类型。在使用一个模板时,我们确实是知道这些类型的,而在我们编译以及连接程序时,这个认识非常有用。对于泛型参数,系统环境无需考虑对那些在运行期间类型会起变化的对象做什么样的处理动作——只需要在编译期间考虑这个问题。 虽然模板是标准库的基础,但是我们还是可以将其用于我们自己的程序中。例如,在4.1.1节中,我们编写了一个函数以用于计算一个vector类型的向量的中值,这个函数依赖于对向量进行排序的能力,然后它就可以用一个指定的索引获取特定的元素。在这种情况下,如果我们想用这个函数处理任意序列的数值,可能比较费时费力。即便是这样,我们也没有理由将这个函数限制为vector类型;我们也可以取其他类型的向量的中值。模板函数允许我们执行。

媒体关注与评论

  本书是一流的C++入门图书,它使用理论与实践相结合的方式来解决C++中的各种问题。与我们所见过的其他C++入门书相比,本书以令人惊叹的紧凑风格涵盖了C++编程的更多领域。  ——Dag Bruck,ANSI/ISO C++委员会的创始成员    通过让学生尽快地编写具有实际意义的程序,作者向我们展示了一种清晰且令人信服的C++教学模式。  ——Stephen Clamage,Sun Microsystems公司,ANSI C++委员会主席    所有学习该书并完成其中示例和习题的人都将获得与众多专业C++程序员一样的技能。  ——Jeffrey D. Oldham,斯坦福大学

内容概要

"Andrew Koenig和Barbara E. Moo堪称C++研究领域的“第一神仙眷侣”,他们不光有着多年的C++开发、研究和教学经验,而且亲身参与了C++的演化和变革,是对C++的变化和发展起到重要影响的人。
Andrew Koenig,AT&T大规模程序研发部(前贝尔实验室)成员,同时也是C++标准委员会项目编辑。他有30多年编程经验,15年C++开发经验,已发表150多篇与C++有关的论文,应邀在世界各地多次演讲。曾编著C Traps and Pitfalls一书,并与妻子合著Ruminations on C++。
Barbara E. Moo,独立咨询顾问,在软件领域从业20多年。在AT&T工作的近15年中,参与了第一个使用C++编写商业产品的开发项目,负责管理公司第一个C++编译器项目,并成功指导开发了AT&T中屡获殊荣的WorldNet Internet Service Business。曾参与编写Ruminations on C++一书,并在世界各地进行过多次演讲。"

书籍目录

"第0章 开始1
0.1 注释1
0.2 #include指令2
0.3 主函数main2
0.4 花括号2
0.5 使用标准库进行输出3
0.6 返回语句3
0.7 进一步的深入4
0.8 小结5
练习7
第1章 字符串的使用8
1.1 输入8
1.2 将姓名装框10
1.3 小结13
练习15
第2章 循环与计数17
2.1 问题17
2.2 程序的整体结构18
2.3 输出数目未知的行18
2.3.1 while语句19
2.3.2 设计while语句20
2.4 输出一行22
2.4.1 输出边界字符23
2.4.2 输出非边界字符25
2.5 完整的框架程序26
2.5.1 略去重复使用的std::27
2.5.2 使用for语句缩短程序27
2.5.3 压缩检测28
2.5.4 完整的框架程序29
2.6 计数30
2.7 小结31
练习34
第3章 使用批量数据36
3.1 计算学生成绩36
3.1.1 检测输入40
3.1.2 循环不变式41
3.2 用中值代替平均值42
3.2.1 将数据集合存储到向量中42
3.2.2 产生输出44
3.2.3 更加深入的观察49
3.3 小结50
练习51
第4章 组织程序和数据52
4.1 组织计算52
4.1.1 查找中值54
4.1.2 重新制定计算成绩的策略55
4.1.3 读家庭作业成绩56
4.1.4 三种函数参数59
4.1.5 使用函数来计算学生的成绩60
4.2 组织数据62
4.2.1 将一个学生的所有数据放置在一起63
4.2.2 处理学生记录63
4.2.3 生成报表65
4.3 将各部分代码连接到一起67
4.4 将计算成绩的程序分块69
4.5 修正后的计算成绩程序71
4.6 小结73
练习74
第5章 使用顺序容器和分析字符串76
5.1 将学生进行分类76
5.1.1 就地删除元素77
5.1.2 顺序存取和随机存取80
5.2 迭代器80
5.2.1 迭代器的类型81
5.2.2 迭代器的操作82
5.2.3 一些语法知识83
5.2.4 students.erase(students.begin()+i)的含义83
5.3 用迭代器代替索引83
5.4 重新思考数据结构以实现更好的性能85
5.5 list类型86
5.5.1 一些重要的差别87
5.5.2 一个恼人的话题88
5.6 分割字符串88
5.7 测试split函数91
5.8 连接字符串93
5.8.1 将图案装框93
5.8.2 纵向连接95
5.8.3 横向连接95
5.9 小结97
练习100
第6章 使用库算法103
6.1 分析字符串103
6.1.1 实现split的另一种方法105
6.1.2 回文107
6.1.3 查找URL107
6.2 比较计算成绩的方案112
6.2.1 处理学生记录112
6.2.2 分析成绩113
6.2.3 计算基于家庭作业平均成绩的总成绩117
6.2.4 上交的家庭作业的中值118
6.3 对学生进行分类并回顾我们的问题119
6.3.1 一种两次传递的解决方案119
6.3.2 一种一次传递的解决方案121
6.4 算法、容器以及迭代器122
6.5 小结123
练习124
第7章 使用关联容器126
7.1 支持高效查找的容器126
7.2 计算单词数量127
7.3 生成交叉引用表129
7.4 生成语句132
7.4.1 呈现规则134
7.4.2 读入文法134
7.4.3 生成语句135
7.4.4 选择随机元素138
7.5 关于性能的一些说明140
7.6 小结140
练习141
第8章 编写泛型函数143
8.1 什么是泛型函数143
8.1.1 未知类型的中值144
8.1.2 模板实例化146
8.1.3 泛型函数和类型146
8.2 数据结构独立性147
8.2.1 算法与迭代器148
8.2.2 顺序只读访问149
8.2.3 顺序只写访问150
8.2.4 顺序读-写访问151
8.2.5 可逆访问152
8.2.6 随机访问152
8.2.7 迭代器区间和越界值153
8.3 输入和输出迭代器155
8.4 使用迭代器提高适应性156
8.5 小结157
练习158
第9章 定义新类型160
9.1 Student_info回顾160
9.2 自定义类型161
9.2.1 成员函数162
9.2.2 非成员函数164
9.3 保护164
9.3.1 存取器函数166
9.3.2 检查对象是否为空167
9.4 Student_info类168
9.5 构造函数168
9.5.1 默认构造函数170
9.5.2 带参数的构造函数171
9.6 使用Student_info类171
9.7 小结172
练习173
第10章 管理内存与低级数据结构175
10.1 指针与数组175
10.1.1 指针176
10.1.2 指向函数的指针177
10.1.3 数组180
10.1.4 指针算法180
10.1.5 索引181
10.1.6 数组初始化182
10.2 字符串字面量回顾182
10.3 初始化字符串指针数组183
10.4 main函数的参数185
10.5 文件读写186
10.5.1 标准错误流186
10.5.2 处理多个输入/输出文件186
10.6 内存管理的三种方法188
10.6.1 为对象分配/释放内存189
10.6.2 为数组分配/释放内存190
10.7 小结191
练习192
第11章 定义抽象数据类型193
11.1 Vec类193
11.2 实现Vec类194
11.2.1 内存分配195
11.2.2 构造函数196
11.2.3 类型定义197
11.2.4 索引与大小198
11.2.5 返回迭代器的操作200
11.3 复制控制201
11.3.1 复制构造函数201
11.3.2 赋值运算符202
11.3.3 赋值不是初始化205
11.3.4 析构函数206
11.3.5 默认操作207
11.3.6 三位一体规则207
11.4 动态的Vec类型对象208
11.5 灵活的内存管理210
11.6 小结216
练习216
第12章 使类对象获得数值功能218
12.1 一个简单的string类219
12.2 自动转换220
12.3 Str操作221
12.3.1 输入和输出运算符222
12.3.2 友元函数223
12.3.3 其他二元运算符225
12.3.4 混合类型表达式227
12.3.5 设计二元运算符228
12.4 有些转换是危险的228
12.5 类型转换操作函数229
12.6 类型转换与内存管理231
12.7 小结232
练习233
第13章 继承与动态绑定的使用235
13.1 继承235
13.1.1 回顾保护类型237
13.1.2 操作函数237
13.1.3 继承与构造函数239
13.2 多态与虚拟函数240
13.2.1 在不确定对象类型时获得对象的值242
13.2.2 动态绑定243
13.2.3 简单回顾244
13.3 使用继承解决问题245
13.3.1 实际类型待定的容器248
13.3.2 虚拟析构函数250
13.4 一个简单的句柄类251
13.4.1 读取句柄253
13.4.2 复制句柄对象254
13.5 使用句柄类256
13.6 微妙之处257
13.6.1 继承与容器257
13.6.2 需要哪个函数258
13.7 小结259
练习260
第14章 近乎自动地管理内存262
14.1 用于复制对象的句柄263
14.1.1 通用句柄类263
14.1.2 使用通用句柄266
14.2 引用计数句柄269
14.3 可以让您决定何时共享数据的句柄272
14.4 可控句柄的一个改进274
14.4.1 复制我们无法控制的类型275
14.4.2 复制在何时才是必要的277
14.5 小结277
练习278
第15章 再探字符图形279
15.1 设计279
15.1.1 使用继承来模拟结构280
15.1.2 Pic_base类282
15.1.3 派生类284
15.1.4 复制控制287
15.2 实现288
15.2.1 实现用户接口288
15.2.2 String_Pic类291
15.2.3 补齐输出结果292
15.2.4 VCat_Pic类293
15.2.5 HCat_Pic类294
15.2.6 Frame_Pic类295
15.2.7 不要忘记友元类声明296
15.3 小结298
练习299
第16章 学习C++的后续方法301
16.1 利用已经掌握的知识301
16.2 学习更多的知识303
练习304
附录A C++语法细节305
A.1 声明305
A.1.1 指定说明307
A.1.2 声明符308
A.2 类型310
A.2.1 整数类型310
A.2.2 浮点类型313
A.2.3 常量表达式314
A.2.4 类型转换314
A.2.5 枚举类型315
A.2.6 重载316
A.3 表达式316
A.4 语句319
附录B 标准库一览322
B.1 输入-输出323
B.2 容器和迭代器325
B.2.1 共有的容器操作325
B.2.2 顺序容器的操作326
B.2.3 其他顺序操作327
B.2.4 关联容器的操作328
B.2.5 迭代器(iterator)328
B.2.6 向量(vector)330
B.2.7 链表(list)331
B.2.8 字符串(string)331
B.2.9 对(pair)332
B.2.10 图(map)333
B.3 算法333
"

作者简介

《Accelerated C++中文版通过示例进行编程实践》系统介绍C++程序设计,是美国斯坦福大学的经典教材。从使用C++标准库中的高级抽象开始,使读者很快掌握编程方法。每一章都有很经典独特的例子以及非常到位的讲解,覆盖了C++更多领域的内容,从标准库容器、泛型算法的使用,到类的设计、泛型算法的设计,《Accelerated C++中文版通过示例进行编程实践》都进行了详细的讲解。《Accelerated C++中文版通过示例进行编程实践》作者(克尼格)有丰富的C++开发、研究和教学经验,内容由浅入深,讲解精炼巧妙。无论是刚入门的新手还是有经验的C++开发人员都能从《Accelerated C++中文版通过示例进行编程实践》中受益。

图书封面


 Accelerated C++中文版通过示例进行编程实践下载 更多精彩书评



发布书评

 
 


精彩书评 (总计2条)

  •     这是我第二本C++的书籍。之前学习C++看的是C++ Primer。后来网上别人推荐这本Accelerated C++才买来学习。对比一下这两本书,无疑,C++ Primer是一个经典,但个人认为它不是一个入门的经典,至少不是快速入门的经典。Accelerated C++和C++ Primer相比主要有一下两个优点:1.只包含C++最基本最重要的内容。C++ Primer这类书几乎把C++的所有特性写了进去,但是对入门而言,很多东西用不上,而且过多内容增加入门的负担。没有基础的人直接啃这样的大部头会花费很多时间。2.通过一个个实例去讲解C++。Accelerated C++的前半部分几乎是对一个例子的不断改进,每次改进引入新的知识点。相对于直接给出一个C++的语法,给出具体实例会让新手更快入门一下。最后,之所以没给Accelerated C++5星是因为这本书的语言总感觉看起来很费劲,有种不知所云的感觉。不知道是否是翻译不好的缘故。前半部分基本是实例,看代码很容易理解作者的意思。后半部分讲的抽象的内容有点看不懂的感觉……不过这本书仍然是一个入门的经典。推荐找一个翻译比较好的版本或者看英文原版。
  •     算是第一个评论吧,希望给其他人参考。本来打算评个5星,但是:1、翻译一般,基本上抄旧版( 覃剑锋翻译的那本,难道是他改名换姓了?),只是换掉了部分词!。某些翻译简直搞笑。2、定价过高 3、排版拙劣,特别是代码排版特差!ps:针对科学出版社的新版,建议淘宝买旧版或者盗版吧(其他地方好像都缺货,不过英文版倒是有的),谁让正版令我失望呢,国内的出版商实在是不负责任。。。。

精彩短评 (总计57条)

  •     用示例来贯穿整本图书
  •     纸张感觉不太舒服,太亮了,还是老版的设计比较好
  •     好书!支持当当!确实是本c++经典。开卷有益!
  •     又啰嗦讲的又不清楚的烂书
  •     因为项目需要学习C++,这本是最容易上手的。里面讲的东西很容易就用上了。
  •     很实用的书,还有就是不用去书店买了,省时方便。
  •     看网上某个大牛的博客推荐的书籍,就买来看看。对原版书籍不做评价,我只是个新手,不敢妄加评论。这里只想就这个翻译版本说一下感受:阅读体验不好。首先就是翻译中的一些小错误,不过这个也是可以理解的,但在代码方面就太不讲究了,不仅代码格式混乱,影响阅读,而且还有不少错误,已经影响到理解内容了,看的时候感觉怎么都说不通,然后就去翻英文版,发现翻译错了,而且后面还有不少这种错误。现在只好中英对照着看...我想说,像这种经典,不要翻译的这么随便好吗?
  •     我是習慣於找國外教材的,國内的大家都懂。。。先說一下我的狀況:《C Primer Plus》看過前五章,也就是C祇是瞭解一下;在網上搜索哪本C++適合入門,搜了很久最終選了這一本,有些人說不適合,其實只要你稍微知道程序怎麽走這本書入門絕對最佳!
  •     学校要求的教材,很好,完全一样。
  •     很好的书,挺有用的。
  •     C++入门的另一个切入角,通过实例很有说服力,而且对于一些没必要知道的知识进行删减,非常实用,我很喜欢
  •     Accelerated C++ 中文版
  •     错误太多了,出版社责任心太差了
  •     书很好,但是有不少印刷错误
  •     不知道为什么评分这么高,我个人觉得这本书其实定位很尴尬,写给初学者的话知识很混乱不成体系,读起来会感觉思维跳来跳去。写给有一定C++经验的人又感觉废话太多了。
  •     c++经典!
  •     确认晚了,不错,正是上课要用的
  •     C++入门经典,中文版太烂
  •     最佳入门
  •     请大家都看看这本书吧,真心挺不错的
  •     四星给原著,负一星给译者
  •     到手察看了出版日期
  •     书的内容质量毋庸置疑,毕竟是相当有名的书,翻译也还行,纸张也ok
  •     用简介生动的方式学习C++的核心内容,还不错,不过排版不是很喜欢
  •     老师推荐的好书,里面主要是通过实例来讲c++,强调实用性,对c++的学习与应用能够产生很大帮助,同时也去掉了其他细枝末节的不重要内容。网络上虽然有pdf版本可以下载,但是是影印版,目录又做得不好,所以使用起来很不方便。推荐还是买实体书,虽然这版是旧版重印,但内容应当不会有多少出入。
  •     看了一部分,觉得很不错,有些内涵!
  •     很好的入门书.把重要的点都仔细的用例子描述了一遍.原来看primer还不清楚的地方很多都更清楚了.
  •     某BBS的C++斑竹力荐
  •     无疑这本书的原著是非常好的,很多老手都推荐,所以我也买来学习,但是呢,翻译质量实在不敢恭维,偶尔错几个汉字就算了,但是居然代码中有很多错误,比如标点,对于一个初学者来说你错一个标点我看起来有多费劲你知道吗?只能下另一版的pdf对照着看了。别说这是第一版来为它解释些什么,校对是干什么的?反正不推荐这本书,这个出版社的这一版书,嗯,希望对大家有用
  •     书是昨天才拍的,很急着用哩,希望厂家尽快发货,快递给我哈。。。
  •     不错,挺有帮助的。同学也说不错。
  •     经典之作。比大部头cpp教程好。
  •     还不错 有些内容还不是很理解 总体不错
  •     可能不适合我的学习习惯吧,总觉得学起来不顺手。
  •     不错的书,值得购买啊
  •     翻译的不好
  •     C++委员会的两人给初学者写的书,不适合刚接触C++的看,因为原理比较复杂,讲得比较深,但还是本入门的书。
  •     如果说学习语言跟学习开车是一样的话,那么这本书就是教你如何开车,而S神的书是教你车本身的原理
  •     感觉这本书挺基础的,有点简略
  •     很不错的一本书, 先代码再讲概念, 重在用法. 虽然缺少深入, 本质的解读, 但是对一本这种厚度的书能做到这样已经很完美了.
  •     出乎意料,真不错
  •     书质量很好,内容看着很简单
  •     好书,这本书适合给那些囫囵吞枣、一知半解的人看。你必须已经建立了完整的知识体系,但对一些细节又有所欠缺。超级棒
  •     书评写过啦~ww
  •     代码印刷有很大的问题,很多的错误
  •     从基础开始学,这本书很不错
  •     整体不错,嘻嘻
  •     正是我需要的书,不过印刷排版难看,一会儿多个空格一会儿少个空格,影响理解代码
  •     不错,正是上课要用的
  •     卖家发货速度很快,东西包装也很好,全新完美
  •     针对前两版红色封面的,这个更适合。
  •     除了有大量的翻译错误,作为一本入门书,真的挺不错的
  •     的评价通过审核后可以获得一
  •     C++的经典教材
  •     应该是不错的!朋友很满意!
  •     具体事例教学,详略得当
  •     看书上说的是国外大学的教材,不知道怎么样,先看看再说
 

外国儿童文学,篆刻,百科,生物科学,科普,初中通用,育儿亲子,美容护肤PDF图书下载,。 零度图书网 

零度图书网 @ 2024