C++程序设计:基础、编程抽象与算法策略(英文版)
作者 : [美]埃里克 S. 罗伯茨(Eric S. Roberts) 著
丛书名 : 经典原版书库
出版日期 : 2017-04-24
ISBN : 978-7-111-56149-1
定价 : 139.00元
教辅资源下载
扩展信息
语种 : 英文
页数 : 944
开本 : 16
原书名 : Programming Abstractions in C++
原出版社: Pearson Education Inc.
属性分类: 教材
包含CD :
绝版 :
图书简介

本书介绍了C++的语言的基本知识和语法,并注重编程策略和技术分析,提升学生的综合能力。

图书前言

致学生
在过去的十年里,计算领域正令人振奋地高速发展着。我们随身携带的网络设备运行速度越来越快,价格越来越便宜,功能也越来越强大。谷歌和维基百科等基于网络的服务给我们提供了大量触手可及的信息。社交网络把我们同世界各地的人联系起来。流媒体技术和更快速的硬件让我们能在任何时候下载所需的音乐和影像。
然而,这些技术并不是突然而至的,而是人们创造了它们。遗憾的是,具备必需的软件开发技能的人现在正供不应求。在硅谷的高科技中心,很多公司找不到能把技术设想转化为现实应用的工程师。各个公司正在极力招聘懂得开发及维护大型系统的人,即懂得数据表示、效率、安全性、正确性和模块化等问题的软件开发人员。
尽管本书不会教给你关于这些主题和计算机科学领域的所有知识,但它会给你一个良好的开始。在斯坦福大学,每年有超过1000名学生选择使用本教材上课。他们中的大部分人觉得在暑期实习或实际工作中仅仅学习本教材中的知识远远不够。更多的学生选择继续学习更深入的课程以使自己在这个高速发展的领域获得更多的机会。
本书的主题除了会在计算机行业中给你提供机会外,同时它也寄乐于学。你在本书中学到的算法和策略有一部分是最近十年发明的,其他的都存在了超过2000年——它们充分体现了人类的聪明才智和创造力。这些算法和策略还非常实用,它们会帮助你成为一个富有经验的程序员。
在你学习本书中的材料时,请牢记,编程总是需要通过实际操作来学习的。阅读一种算法技术并不代表你就能够把那个算法应用到实际中去。只有通过练习和尝试去解决问题的调试,你才能真正学到算法的精髓。编程有时候使人感觉很沮丧,但是当你找到最后一个错误并且看到你的程序正确运行时,会欣喜若狂,它足以回报你在编程这条道路上所付出的任何努力。
致教师
本教材适合作为典型的大学课程中第二门编程课程的教材。它涵盖了ACM的Curriculum 8报告中定义的传统CS2课程中的材料。因此它包含了CS102和CS103课程指定的绝大多数主题,CS102和CS103分别由“ACM/IEEE-CS联合计算机课程2001版”报告及“计算机科学课程2013版”草稿中的AL/基本数据结构及算法单元中的材料定义。
本教材采用的教学策略在斯坦福大学已大获成功。
1.数据结构的客户优先方法。传统的CS2课程由一系列基本数据结构组成。采用此模型,学生可同时学习如何使用一个特定的结构和如何实现它及理解它的性能特点。相比之下,本教材很早地展现了类的完整集合,让学生以客户的身份逐渐熟悉这些类。一旦学生透彻理解了这些内容,本书即开始展现它可能的实现范围和相关的计算特性。在斯坦福大学采用这种策略有助于学生轻松理解相关内容。自从做了这个改变,学生在需要使用集合类的考试中的分数也有了大幅度提高。
2.稍晚呈现那些需要详细了解底层机器的C++特性。尽管前两章给学生提供了C++中基本类型和控制结构的总览,但初始的部分刻意地区分了基本指针和数组等依赖于对底层机器架构理解的主题。虽然这些细节是CS2的基本部分,但也没有必要在课程刚开始的时候就给学生过大的负担。尽早介绍类的集合使得学生能够掌握几个其他同等重要的主题,包括集合类、递归、面向对象设计和算法分析,但是不需要同时纠结于它的底层细节。
3.一个方便易用的图形化可移植类库。使用C++作为教学语言的一个问题是标准类库不提供图形化功能。而本书自带了一个免费发布的开源类库—Standford C++类库,它提供了一种进行图形交互的简单且宜教宜学的方法。Standford C++类库还包括集合类的简化实现,它支持一个更逻辑化且更加有效的表示规则。
补充资源
对于学生
在Pearson网站(http://www.pearsonhighered.com/ericroberts/)上,读者可下载以下资源:
1.书中每个示例程序的源代码文件
2.运行示例的全彩PDF版本
3.复习题的答案
对于教师
在Pearson网站上,有资格的教师可下载以下资源:
1.书中每个示例程序的源代码文件
2.运行示例的全彩PDF版本
3.复习题的答案
4.编程习题的答案
5.每章的PowerPoint课件
Stanford C++类库
Stanford C++类库作为开源的开发项目可以免费获得。头文件、编译库和源代码可以通过GitHub (http://www.github.com/eric-roberts/StanfordCPPLib)或从作者的个人网站(http://cs.stanford.com/~eroberts/StanfordCPPLib)获得。
致谢
本教材有着有趣的发展历史,它在某些方面也反映了C++语言自身的进化。就像Bjarne Stroustrup的第1版C++是在C语言的基础上实现的,本书产生于我的另一本基于C语言的书—《C程序设计的抽象思维》,它由Pearson下属的AddisonWesley于1998年出版。十年前,我的斯坦福同事Julie Zelenski用C++语言更新了它,在那一年我们开始在一系列的概述课程中使用它。尽管修订的教材版本在开始时效果很好,但这些年来我们演变的系列概述课程表明它需要一个重新编写的教材版本,而这本书就是最终的产品。
我要感谢过去这些年在斯坦福的同事,首先要感谢Julie Zelenski在初始C++版本上的卓越贡献。我的同事Keith Schwarz、Jerry Cain、Stephen Cooper和Mehran Sahami 都对修订版做出了重要贡献。我还要向几届课程负责人和这些年我的学生表示感谢,他们都让本课程的教学变得更有激情。
另外,我还要向Marcia Horton、Tracy Johnson和Pearson团队的其他成员表达衷心的感谢,因为他们都对本书和它的旧版本的修订提供了大力支持。
最后,最衷心地感谢我的妻子Lauren Rusk,她又一次作为我的开发编辑发挥了她的魔力。Lauren梳理和润色了本书的文字。没有她,这本书不会成为现在这个样子。

埃里克S.罗伯茨
斯坦福大学

上架指导

计算机\程序设计

封底文字

本书是一本风格独特的C++语言教材,内容源自作者在斯坦福大学多年成功的教学实践。它突破了一般C++编程教材注重介绍C++语法特性的局限,不仅全面讲解了C++语言的基本概念,而且将重点放在深入剖析编程思路上,并以循序渐进的方式教授读者正确编写出可行高效的C++程序。本书内容遵循ACM CS2013关于程序设计课程的要求,既适合作为高校计算机及相关专业学生的教材或教学参考书,也适合希望学习C++语言的初学者和中高级程序员使用。

本书特色:
 ● 本书面向C++语言的初学者,从内容安排到讲授都遵循化繁为简、通俗易懂的特色,并安排大量案例,理论联系实际,使读者轻松进入C++编程的大门。
 ● 本书突出C++语言的特点,以面向对象概念和编程抽象为核心,使读者了解并掌握现代企业所需的优秀软件开发人员所需要的编程思维与实践能力。
 ● 本书努力跨越传统的程序设计语法与算法策略之间的鸿沟,通过独具匠心的内容安排,将数据结构、算法的相关内容与语法基础巧妙结合,将众多经典、实用的算法策略传授给读者,为后续课程或读者的深入学习奠定基础。

作者简介

[美]埃里克 S. 罗伯茨(Eric S. Roberts) 著:
Eric S.Roberts是美国斯坦福大学计算机科学系教授,并担任系里主管教学事务的副主任,同时他还是工学院的Charles Simonyi讲席教授。他于1980年在哈佛大学应用数学系获得博士学位,并曾在DEC公司位于加州Palo Alto的系统研究中心做过5年的研究工作。作为一位获得高度评价的教育工作者,Roberts还因其在本科生教学中的杰出贡献获得了1993年的Bing Award奖。他的另一本备受赞誉的书《C语言的科学和艺术》已由机械工业出版社引进出版。

图书目录

出版者的话
前言
第1章 C++概述1
1.1 你的第一个C++程序2
1.2 C++的历史3
1.3 编译过程6
1.4 C++程序结构7
1.5 变量14
1.6 数据类型19
1.7 表达式26
1.8 语句36
本章小结47
复习题48
习题50
第2章 函数与库55
2.1 函数概念56
2.2库59
2.3在C++中定义函数61
2.4函数调用机制65
2.5引用参数73
2.6接口与实现78
2.7接口设计原则85
2.8随机数库的设计90
2.9Stanford类库介绍107
本章小结112
复习题114
习题115
第3章 字符串类string125
3.1使用字符串作为抽象数据126
3.2字符串操作129
3.3库137
3.4修改字符串中的内容138
3.5遗留的C风格字符串139
3.6编写字符串应用程序140
3.7strlib.h库146
本章小结147
复习题148
习题149
第4章 流类159
4.1格式化输出160
4.2格式化输入165
4.3数据文件167
4.4类层次181
4.5simpio.h和filelib.h库186
本章小结188
复习题189
习题190
第5章 集合类 195
5.1Vector类197
5.2Stack类211
5.3Queue类217
5.4Map类226
5.5Set类232
5.6在集合上进行迭代236
本章小结243
复习题245
习题246
第6章 类的设计261
6.1 二维点的表示262
6.2 操作符重载268
6.3 有理数281
6.4 token扫描器类的设计292
6.5 将程序封装成类301
本章小结303
复习题305
习题306
第7章 递归简介315
7.1 一个简单的递归例子316
7.2 阶乘函数318
7.3 斐波那契函数325
7.4 检测回文332
7.5 二分查找算法335
7.6 间接递归336
7.7 递归地思考338
本章小结340
复习题342
习题344
第8章 递归策略349
8.1 汉诺塔350
8.2 子集求和问题361
8.3 字符排列364
8.4 图的递归368
本章小结375
复习题375
习题376
第9章 回溯算法389
9.1 迷宫的递归回溯390
9.2 回溯与游戏400
9.3 最小最大算法409
本章小结415
复习题416
习题417
第10章 算法分析429
10.1 排序问题430
10.2 时间复杂度435
10.3 递归的终止443
10.4 标准的算法复杂度类别449
10.5 快速排序算法452
10.6 数学归纳法458
本章小结462
复习题463
习题466
第11章 指针和数组473
11.1 内存结构474
11.2 指针484
11.3 数组494
11.4 指针运算500
本章小结506
复习题508
习题510
第12章 动态内存管理515
12.1 动态分配和堆516
12.2 链表519
12.3 释放内存523
12.4 定义CharStack类527
12.5 堆-栈图536
12.6 单元测试543
12.7 拷贝对象546
12.8 关键字const的使用550
12.9 CharStack类的效率558
本章小结560
复习题562
习题564
第13章 效率和表示569
13.1 编辑文本的软件模式570
13.2 设计简单的文本编辑器572
13.3 基于数组的类实现579
13.4 基于栈的类实现586
13.5 基于列表的类实现591
本章小结607
复习题608
习题610
第14章 线性结构615
14.1 模板616
14.2 栈的实现619
14.3 队列的实现634
14.4 实现矢量类649
14.5 集成原型和代码656
本章小结657
复习题658
习题659
第15章 映射663
15.1 使用矢量实现映射664
15.2 查找表668
15.3 哈希671
15.4 实现HashMap类682
本章小结683
复习题684
习题685
第16章 树689
16.1 家谱691
16.2 二叉搜索树693
16.3 平衡树706
16.4 使用BST实现映射717
16.5 偏序数719
本章小结722
复习题724
习题727
第17章 集合737
17.1 集合作为一种数学抽象738
17.2 集合接口的扩展742
17.3 集合的实现策略747
17.4 优化小整数的集合753
本章小结761
复习题762
习题764
第18章 图767
18.1 图的结构768
18.2 表示策略772
18.3 一种低层的图抽象776
18.4 图的遍历783
18.5 定义图类789
18.6 寻找最短路径804
18.7 搜索网页的算法808
本章小结812
复习题813
习题815
第19章 继承823
19.1 简单的继承824
19.2 图形对象的继承层次832
19.3 表达式的类层次842
19.4 解析表达式862
19.5 多重继承871
本章小结874
复习题876
习题878
第20章 迭代策略887
20.1使用迭代器888
20.2使用函数作为数据值892
20.3用函数封装数据901
20.4STL算法库906
20.5C++的函数式编程909
20.6 迭代器的实现913
本章小结920
复习题922
习题923

教学资源推荐
作者: [美] 斯图尔特·里杰斯(Stuart Reges) 马蒂·斯特普(Marty Stepp) 艾利森·奥伯恩(Allison Obourn) 著
作者: [美] 丹尼尔·卡斯沃姆(Daniel Kusswurm) 著
作者: 程学先 林姗 程传慧
作者: 辛运帏 高宁 徐文拴 等编著
参考读物推荐
作者: 万国根等
作者: 张文亮 编著
作者: 闫兴亚 张克发 等著
作者: David Berube