Big C++中文版(原书第3版)
作者 : [美] 凯·霍斯特曼(Cay Horstmann) 著
译者 : 姚爱红 林明宇 田啸天 李玉坤 译
丛书名 : 计算机科学丛书
出版日期 : 2019-10-28
ISBN : 978-7-111-63819-3
定价 : 199.00元
教辅资源下载
扩展信息
语种 : 简体中文
页数 : 754
开本 : 16
原书名 : Big C++,Third Edition
原出版社: John Wiley & Sons(USA)
属性分类: 教材
包含CD : 无CD
绝版 :
图书简介

本书讨论C++和程序设计,重点是其中的核心概念以及高效的学习方法,不要求读者具备编程经验。书中采用传统的讲授方法,首先强调控制结构、过程分解和数组算法,在较为靠前的章节中就适时地引入了对象的概念。从第9章开始,读者将动手设计和实现自定义的类。最后介绍数据结构和算法,涉及高级C++特性。本书语言浅显易懂,并且包含大量习题和编程项目,既适合作为高等院校计算机及相关专业的教材,也适合初学者自学。

图书特色

《Java核心技术》作者新作,先学习基础理论,之后通过实例逐步掌握面向对象编程思想

图书前言

本书专注于介绍C++和程序设计的本质以及如何高效学习。本书旨在满足学生广泛的兴趣和提高学生的能力,并且适合作为计算机科学家、工程师和其他专业学生学习第一门编程课的教材。学习本书无须具备编程经验,只需具备少量高中代数知识。
本书特色
本书主要特色如下:
基础理论先行
本书使用C++程序设计语言作为介绍计算机科学概念的载体。本书涵盖了重要的C++语言的子集,专注于标准C++语言的现代特性,这些特性使学生更富有成效。本书采用了传统的写作思路,首先重点介绍控制结构、过程分解和数组算法。在前几章中适当的时候使用了对象。在第9章中,学生开始设计和实现自定义的类。
逐步指导及可运行的示例助力学生成功
新手程序员经常会问:“我怎么开始?现在我应该做什么?”当然,像编程这么复杂的事情不能简化成类似菜谱的指令。然而,按步骤的指导对于建立自信并提供完成任务的要点都是非常有帮助的。“问题求解”小节强调设计和规划的重要性。“如何去做”帮助完成编程工作。附加的“可运行的示例”在E-Text上或者线上都是可用的。
提示:本书中所有示例程序的源文件,包括可运行的示例,都随本书的源代码提供。请下载这些文件至你的计算机中,以便学习各章节时访问。
练习才能臻于完美
学习程序设计的学生当然应有能力实现非常有用的程序,但是,他们首先要有相信自己能够成功的自信。增强的E-Text使学生沉浸在旨在培养深入学习的活动中。学生不仅仅观看动画和代码运行轨迹,还要努力去生成代码。这一过程提供即时反馈,来向学生展示他们做得对的地方和还需要学习的地方。每节的末尾都提供了丰富的练习,包括代码补全问题和面向技巧的多项选择题。同时,每一章都以精心设计的复习题和编程项目结束。
清晰的问题求解策略
对技术实用且循序渐进的描述方式,有助于学生设计并评估编程问题的各种解决方案。这些问题解决策略只在最相关的地方引入,以帮助学生克服成功路上的障碍。这些策略包括:
算法设计(附伪代码)
手工模拟执行(手工实现示例计算)
流程图
选择测试用例
手工追踪程序运行轨迹
情节串联图板
首先解决一个较简单的问题
可复用的函数
逐步求精
自适应算法
通过操纵有形的物体来发现算法
绘制图片(指针图表)
跟踪对象(确认其状态和行为)
发现类
递归式思维
评估算法的运行时间
可视化方法激励读者并简化导读
图片提供了旨在解释计算机相关概念的本质和行为的类比物。循序渐进的图形能形象地说明复杂的程序操作。语法框和示例表以紧凑的格式展示了各种典型案例和特殊案例。在专注于文字材料之前,通过浏览图片来获得“整体的印象”是较为容易的。
技术上准确的同时专注于本质
对于新手程序员而言,百科全书式的覆盖范围并无益处。但是,相反的情况—把材料精简为过于简单化的要点—也无济于事。本书中,知识要素以读者可消化的粒度展现,当读者准备好接收额外的信息时,本书提供单独的注解帮助其深入练习和理解语言的特性,因而不会发生由于人为过度简化导致读者对知识产生错觉。
增强合理的工程实践
本书提供大量关于软件质量和常见错误的有用提示,鼓励学生养成良好的编程习惯。重点关注测试驱动的开发,鼓励学生系统地测试自己编写的程序。
可选的工程和商业领域练习题
来自科学和商业领域的问题提升了每章末尾的练习题的质量。为了吸引学生,这些练习题展示了程序设计对应用领域的价值。
第3版的更新
针对现代版本的C++进行了更新
将C++ 2011和C++ 2014标准的许多特征描述为推荐的“最佳实践”或者作为特别专题。
新增并重新组织了专题
本书目前支持从两种途径来学习面向对象程序设计以及继承。读者可以在引入类的概念之前学习指针和结构。或者,可以将指针的学习推迟到学习类的实现之后。
本版本增加了常用数据结构和算法的内容,因而可以支持计算机科学专业的其他课程。
在一系列可运行的示例和练习题中引入了“多媒体专项”,例如生成和修改图像、声音和动画。
本书导读
本书可用于两学期的程序设计导论课程,既包含算法,也包含数据结构。全书章节的组织与之前的版本一样灵活,各章节之间的依赖关系如图1所示。

图1 章节依赖关系
第一部分:基础知识(第1~8章)
前6章遵循传统的方法介绍基本的程序设计概念。学生将学习控制结构、逐步求精和数组。对象仅用于输入/输出和字符串处理。输入/输出首先在第2章中谈及,接下来在8.1节中介绍如何读取和写入文本文件。
对于有系统编程或者嵌入式编程需要的工程师,会涉及第7章关于指针的内容。学习过7.1节和7.4节的内容,读者足以继续学习第10章的多态性指针。
第8章的主题是文件处理。8.1节介绍如何读取和写入文本文件,其余部分给出开发实际应用所需的额外资料。
第二部分:面向对象设计(第9~10章)
当打下坚实的基础后,学生就已经准备好处理类的实现问题了。第9和10章介绍C++的面向对象特性。第9章介绍类的设计和实现。第10章涉及继承和多态性。当这两章结束时,学生将有能力实现具有多个交互类的程序。
第三部分:数据结构和算法(第11~17章)
第11~17章涵盖适合初学者的算法和数据结构内容。第11章介绍递归,以简单的示例开始,逐步发展为难以用迭代实现的有意义的应用程序。第12章介绍二次排序算法以及归并排序,并对大O符号进行了非正式的介绍。第13章介绍实现数据结构所需的高级C++特性,包括模板和内存管理。第14~17章涵盖基于线性和树的数据结构。学生将学习如何使用标准的C++库版本,然后将学习这些数据结构的实现,并分析其效率。
附录
附录A和B总结C++保留字和运算符。附录C列出转义字符序列和ASCII码值。附录D记录本书中使用的所有库函数和类。
附录E是一份编程风格指南。通过引导学生养成良好的习惯及减少不当的选择,使用编程风格指南完成程序设计作业对学生是有益的。为便于指导教师修改以反映他们倾向的风格,在本书的网站上以电子版形式提供该编程风格指南。
附录F介绍计算中常用的数字系统。
网络资源
本书配有一套完整的在线资源。www.wiley.com/go/bclo3为本书配套网站,其中包括:
书中所有示例程序及“可运行的示例”的源代码,包含附加的示例程序。
可运行的示例—将本书中的问题求解步骤应用于其他现实的例子。
讲义幻灯片(仅供指导教师使用)。
所有的复习题和编程练习题的答案(仅供指导教师使用)。这一扩展的多选题集合可以在字处理软件中使用,或者导入课程管理系统中使用。
“代码检查”允许学生使用一种创新的在线服务来学习程序设计问题,并立即获得反馈。指导教师可以选用系统已有的练习题,或者很方便地添加自己的练习题。访问http://codecheck.it可了解更多内容。
致谢
非常感谢John Wiley & Sons出版公司的Don Fowley、Graig Donini、Dan Sayre、Ryann Dannelly、David Dietz、Laura Abrams和Billy Ray对本项目的帮助。特别感谢Cindy Johnson的辛勤工作、良好判断以及对细节的惊人关注。
非常感谢Ivy Technical College的Mark Atkins、Gaston College的Katie Livsie、Arkansas Tech University的Larry Morell以及Gaston College的Rama Olson对补充材料的贡献,特别感谢Orange Coast Community College的Stephen Gilbert对交互式练习的帮助。
本书的每个新版本都建立于新的和以前的评论者、贡献者以及用户的建议和经验之上。我们非常感谢那些提供反馈、审阅手稿、提出宝贵建议,以及提醒我注意错误和遗漏的人。他们是:
Charles D. Allison, Utah Valley State College
Fred Annexstein, University of Cincinnati
Mark Atkins, Ivy Technical College
Stefano Basagni, Northeastern University
Noah D. Barnette, Virginia Tech
Susan Bickford, Tallahassee Community College
Ronald D. Bowman, University of Alabama, Huntsville
Robert Burton, Brigham Young University
Peter Breznay, University of Wisconsin, Green Bay
Richard Cacace, Pensacola Junior College, Pensacola
Kuang-Nan Chang, Eastern Kentucky University
Joseph DeLibero, Arizona State University
Subramaniam Dharmarajan, Arizona State University
Mary Dorf, University of Michigan
Marty Dulberg, North Carolina State University
William E. Duncan, Louisiana State University
John Estell, Ohio Northern University
Waleed Farag, Indiana University of Pennsylvania
Evan Gallagher, Polytechnic Institute of New York University
Stephen Gilbert, Orange Coast Community College
Kenneth Gitlitz, New Hampshire Technical Institute
Daniel Grigoletti, DeVry Institute of Technology, Tinley Park
Barbara Guillott, Louisiana State University
Charles Halsey, Richland College
Jon Hanrath, Illinois Institute of Technology
Neil Harrison, Utah Valley University
Jurgen Hecht, University of Ontario
Steve Hodges, Cabrillo College
Jackie Jarboe, Boise State University
Debbie Kaneko, Old Dominion University
Mir Behrad Khamesee, University of Waterloo
Sung-Sik Kwon, North Carolina Central University
Lorrie Lehman, University of North Carolina, Charlotte
Cynthia Lester, Tuskegee University
Yanjun Li, Fordham University
W. James MacLean, University of Toronto
LindaLee Massoud, Mott Community College
Adelaida Medlock, Drexel University
Charles W. Mellard, DeVry Institute of Technology, Irving
Larry Morell, Arkansas Tech University
Ethan V. Munson, University of Wisconsin, Milwaukee
Arun Ravindran, University of North Carolina at Charlotte
Philip Regalbuto, Trident Technical College
Don Retzlaff, University of North Texas
Jeff Ringenberg, University of Michigan, Ann Arbor
John P. Russo, Wentworth Institute of Technology
Kurt Schmidt, Drexel University
Brent Seales, University of Kentucky
William Shay, University of Wisconsin, Green Bay
Michele A. Starkey, Mount Saint Mary College
William Stockwell, University of Central Oklahoma
Jonathan Tolstedt, North Dakota State University
Boyd Trolinger, Butte College
Muharrem Uyar, City College of New York
Mahendra Velauthapillai, Georgetown University
Kerstin Voigt, California State University, San Bernardino
David P. Voorhees, Le Moyne College
Salih Yurttas, Texas A&M University
特别感谢所有的类代码测试人员:
University of Redlands的Pani Chakrapani和学生
Long Beach City College, LAC的Jim Mackowiak和学生
University of Wyoming的Suresh Muknahallipatna和学生
Indiana University of South Bend的Murlidharan Nair和学生
New River Community College的Harriette Roadman和学生
Ohlone College的David Topham和学生
Gavilan College的Dennie Van Tassel和学生

上架指导

计算机\程序设计

封底文字

本书由经典畅销书籍《Java核心技术》的作者Cay Horstmann撰写,非常适合C++初学者和爱好者阅读,不仅能够帮助新手快速入门,掌握基础知识,而且有益于培养读者解决实际问题的思维和能力。

书中采用传统的讲授方法,首先强调控制结构、过程分解和数组算法,在较为靠前的章节中就适时地引入了对象的概念。从第9章开始,读者将动手设计和实现自定义的类。最后介绍数据结构和算法,涉及高级C++特性。

本书特色
·难度适中,适合自学。从C++繁杂的特性中进行精选,既涵盖大多数现代特性及程序设计的基本思想,又保持了适当的学习难度。
·深入浅出,阐述透彻。对于一些难以理解的内容,结合文字、图片、代码及习题等多种方式进行讲解,所有代码均可免费下载。
·实例学习,强调实战。共包含25个可运行的示例,通过实践帮助读者理解面向对象程序设计,从新手进阶为富有成效的程序员。

作者简介

[美] 凯·霍斯特曼(Cay Horstmann) 著:凯·霍斯特曼(Cay Horstmann) 圣何塞州立大学计算机科学系教授,Java的倡导者,经常在开发人员会议上发表演讲。他是《Java核心技术》的作者,同时也关注Python、Scala、C++等语言,为专业程序员和计算机科学专业学生编写过数十本图书。

译者序

本书作者Cay Horstmann教授1987年自密歇根大学安娜堡分校博士毕业之后,曾经有十多年时间在工业界从事软件设计和开发工作。同时,自1987年至今,他一直在圣何塞州立大学任教,教授面向对象程序设计、程序设计语言、数据结构与算法等课程。Horstmann教授也曾经作为访问教授在瑞典、越南和澳门讲授相关课程。在业余时间,他著作颇丰,共创作了十几本关于C++、Java、Python以及面向对象程序设计的书。基于其工业界的实际工作经验以及对世界各地学生思维方式的了解,本书将课堂教学的理论知识传授与工程实践训练有机结合,使学生的学习更有效率。
约10年前,我们翻译了本书的第1版。翻译的过程虽然艰辛,但也是宝贵的学习和提高过程,可以说受益匪浅。这次翻译第3版是承蒙机械工业出版社华章分社曲熠编辑的信任,经历了又一次的学习和锻炼。翻译中,我们发现第3版与第1版相比内容变化非常大,粗略估计重复的文字数不到十分之一。相比第1版,目前的版本对读者更加友好,对于比较难以理解的知识点进行了合理的规划和处理,从第1到11章,每一章中的“如何去做”一步一步地引导读者从毫无编程基础的小白逐渐成长为富有成效的C++程序员。而每一章中的“可运行的示例”,对实现解决实际问题的C++程序的过程进行了详尽的描述,除了程序设计的思路外,还展示了代码实现所涉及的细节—特别是如何测试所设计的程序、如何处理输入输出等。本书主要有以下特色:
难度适中,适合自学。C++语言发展至今,内容不可谓不繁杂。作者结合自身的业界经验和教学体会对内容进行了精心选择,既涵盖C++的绝大多数现代特性以及面向对象程序设计技术的基本思想,又保持了适当的学习难度,使得具有高中代数知识基础的读者能够看得进去,学得下去,不会因为部分内容晦涩难懂而放弃。
深入浅出,阐述透彻。对某些难以理解和掌握的内容,例如移动拷贝构造函数和移动赋值运算符、常量引用、虚函数和多态性、递归思维和回溯以及如何评估算法的性能等,通过文字表述、图片示意以及示例代码等多方面进行阐述,详尽而透彻。相信即使是有经验的C++程序员,阅读本书也能开卷有益。
实例学习,强调实战。通过一些精心设计的实例,读者能够得到切实的C++程序设计训练,尽快进入实战状态。书中提供的25个可运行的示例,不仅有助于读者以C++语言为载体,理解面向对象程序设计的基本方法,还能为常用算法的设计提供参考代码。
本书由姚爱红、林明宇、田啸天、李玉坤翻译,全书由姚爱红审校。
感谢机械工业出版社华章分社的曲熠编辑在本书翻译过程中给予的鼓励与帮助,感谢责任编辑朱秀英及其他为保证本书的质量做了大量工作的机械工业出版社华章分社的编辑们。
虽然我们尽了很大努力,以确保译文在文字和内容上忠实原著,但限于译者水平,难免有疏漏之处,敬请广大读者批评指正。

姚爱红
2019年9月
于哈尔滨工程大学

图书目录

出版者的话
译者序
前言
第1章 引言 1
1.1 何谓编程 1
1.2 计算机的组成 2
1.3 机器代码和程序设计语言 4
1.4 熟悉编程环境 5
1.5 分析第一个程序 8
1.6 错误 11
1.7 问题求解:算法设计 12
1.7.1 算法的概念 12
1.7.2 求解投资问题的算法 13
1.7.3 伪代码 14
1.7.4 从算法到程序 14
本章小结 18
复习题 19
练习题 22
编程项目 23
第2章 基本数据类型 25
2.1 变量 25
2.1.1 变量定义 25
2.1.2 数值类型 26
2.1.3 变量名 27
2.1.4 赋值语句 27
2.1.5 常量 29
2.1.6 注释 29
2.2 算术运算 33
2.2.1 算术运算符 33
2.2.2 递增和递减 33
2.2.3 整数除法和余数 33
2.2.4 将浮点数转换为整数 34
2.2.5 幂运算和求根运算 34
2.3 输入和输出 40
2.3.1 输入 40
2.3.2 格式化输出 41
2.4 问题求解:首先通过手工实现 43
2.5 字符串 46
2.5.1 字符串类型 47
2.5.2 连接 47
2.5.3 字符串输入 47
2.5.4 字符串函数 48
本章小结 50
复习题 51
练习题 54
编程项目 56
第3章 分支 64
3.1 if语句 64
3.2 数字和字符串的比较 69
3.3 多路分支 75
3.4 嵌套分支 79
3.5 问题求解:流程图 83
3.6 问题求解:测试用例 85
3.7 布尔变量和运算符 87
3.8 实际应用:输入确认 91
本章小结 94
复习题 95
练习题 99
编程项目 101
第4章 循环 109
4.1 while循环 109
4.2 问题求解:手动跟踪 115
4.3 for循环 118
4.4 do循环 123
4.5 处理输入 124
4.5.1 标记值 124
4.5.2 一直读直至输入失败 126
4.6 问题求解:情节串联图板 129
4.7 常用的循环算法 131
4.7.1 求和及均值 131
4.7.2 统计匹配项 132
4.7.3 找到第一个匹配项 132
4.7.4 一直提示输入直至找到匹配项 132
4.7.5 最大值和最小值 133
4.7.6 比较相邻值 133
4.8 嵌套循环 137
4.9 问题求解:首先解决较简单的问题 140
4.10 随机数与模拟 144
4.10.1 生成随机数 144
4.10.2 模拟掷骰子 145
4.10.3 蒙特卡罗方法 146
本章小结 148
复习题 149
练习题 153
编程项目 156
第5章 函数 167
5.1 将函数看作黑盒 167
5.2 实现函数 168
5.3 参数传递 170
5.4 返回值 172
5.5 无返回值的函数 176
5.6 问题求解:可重用函数 177
5.7 问题求解:逐步细化 178
5.8 变量作用域和全局变量 185
5.9 引用参数 187
5.10 递归函数(可选) 191
本章小结 196
复习题 197
练习题 200
编程项目 203
第6章 数组和向量 225
6.1 数组 225
6.1.1 定义数组 225
6.1.2 访问数组元素 227
6.1.3 部分填充的数组 228
6.2 常见的数组算法 230
6.2.1 填充 230
6.2.2 复制 231
6.2.3 求和及均值 231
6.2.4 最大值和最小值 231
6.2.5 元素分隔符 232
6.2.6 统计匹配项 232
6.2.7 线性搜索 232
6.2.8 移除元素 233
6.2.9 插入元素 233
6.2.10 交换元素 234
6.2.11 读取输入 235
6.3 数组与函数 239
6.4 问题求解:修改算法 242
6.5 问题求解:通过操纵有形的物体发现算法 248
6.6 二维数组 250
6.6.1 定义二维数组 250
6.6.2 访问数组元素 251
6.6.3 定位相邻元素 251
6.6.4 计算行和列的合计 252
6.6.5 二维数组参数 253
6.7 向量 256
6.7.1 定义向量 256
6.7.2 增大和减小向量 257
6.7.3 向量和函数 258
6.7.4 向量算法 259
6.7.5 二维向量 260
本章小结 262
复习题 262
练习题 266
编程项目 269
第7章 指针和结构体 282
7.1 定义和使用指针 282
7.1.1 定义指针 282
7.1.2 通过指针访问变量 283
7.1.3 指针的初始化 285
7.2 数组和指针 287
7.2.1 数组作为指针 287
7.2.2 指针的算术运算 288
7.2.3 数组参数变量就是指针 289
7.3 C和C++字符串 292
7.3.1 字符类型 292
7.3.2 C字符串 292
7.3.3 字符数组 293
7.3.4 C和C++字符串的相互转换 293
7.3.5 C++字符串和运算符[] 294
7.4 动态内存分配 296
7.5 指针数组和指针向量 299
7.6 问题求解:绘制指针-数据关系图 302
7.7 结构体 305
7.7.1 结构体类型 305
7.7.2 结构体的赋值和比较 306
7.7.3 函数和结构体 306
7.7.4 结构体数组 306
7.7.5 具有数组成员的结构体 307
7.7.6 嵌套结构体 307
7.8 指针和结构体 309
7.8.1 指向结构体的指针 309
7.8.2 具有指针成员的结构体 309
本章小结 311
复习题 311
练习题 315
编程项目 317
第8章 流 323
8.1 读写文本文件 323
8.1.1 打开流 323
8.1.2 从文件中读入 324
8.1.3 写入文件 325
8.1.4 文件处理示例 325
8.2 读取文本输入 328
8.2.1 读入单词 328
8.2.2 读取字符 328
8.2.3 读取多行数据 329
8.3 写入文本输出 332
8.4 解析和格式化字符串 334
8.5 命令行参数 336
8.6 随机访问及二进制文件 342
8.6.1 随机访问 343
8.6.2 二进制文件 343
8.6.3 处理图像文件 343
本章小结 347
复习题 348
练习题 348
编程项目 350
第9章 类 358
9.1 面向对象程序设计 358
9.2 实现一个简单的类 359
9.3 指定类的公共接口 361
9.4 设计数据表示 363
9.5 成员函数 365
9.5.1 实现成员函数 365
9.5.2 隐式和显式参数 365
9.5.3 从成员函数调用成员函数 366
9.6 构造函数 369
9.7 问题求解:跟踪对象 374
9.8 问题求解:发现类 380
9.9 单独编译 382
9.10 指向对象的指针 386
9.10.1 动态分配对象 386
9.10.2 ->运算符 387
9.10.3 this指针 387
9.11 问题求解:对象数据的模式 388
9.11.1 保存总数 388
9.11.2 对事件进行计数 389
9.11.3 聚集值 389
9.11.4 管理对象的属性 390
9.11.5 对具有不同状态的对象建模 390
9.11.6 描述对象的位置 391
本章小结 393
复习题 394
练习题 396
编程项目 397
第10章 继承 406
10.1 继承层次结构 406
10.2 实现派生类 410
10.3 重写成员函数 414
10.4 虚函数及多态性 417
10.4.1 切割派生类数据问题 417
10.4.2 指向基类和派生类的指针 418
10.4.3 虚函数 419
10.4.4 多态性 420
本章小结 430
复习题 431
练习题 434
编程项目 434
第11章 递归 443
11.1 三角形数 443
11.2 递归助手函数 450
11.3 递归的效率 451
11.4 排列 455
11.5 相互递归 458
11.6 回溯 461
本章小结 468
复习题 468
练习题 469
编程项目 471
第12章 排序和查找 481
12.1 选择排序 481
12.2 剖析选择排序算法 483
12.3 分析选择排序算法的性能 484
12.4 归并排序 488
12.5 分析归并排序算法 490
12.6 查找 494
12.6.1 线性查找 494
12.6.2 二分查找 495
12.7 问题求解:估计算法的运行时间 498
12.7.1 线性时间 498
12.7.2 平方时间 499
12.7.3 三角形图案 500
12.7.4 对数时间 501
本章小结 503
复习题 504
练习题 507
编程项目 508
第13章 高级C++特性 515
13.1 运算符重载 515
13.1.1 运算符函数 515
13.1.2 重载比较运算符 517
13.1.3 输入和输出 518
13.1.4 运算符成员 518
13.2 自动内存管理 522
13.2.1 分配内存的构造函数 522
13.2.2 析构函数 523
13.2.3 重载赋值运算符 525
13.2.4 拷贝构造函数 528
13.3 模板 536
13.3.1 函数模板 537
13.3.2 类模板 537
本章小结 540
复习题 541
练习题 544
编程项目 546
第14章 链表、栈和队列 564
14.1 使用链表 564
14.2 实现链表 568
14.2.1 链表、节点和迭代器类 569
14.2.2 实现迭代器 570
14.2.3 实现插入和删除 572
14.3 链表、数组及向量操作的效率 580
14.4 栈和队列 583
14.5 实现栈和队列 586
14.5.1 由链表实现栈 586
14.5.2 由数组实现栈 589
14.5.3 由链表实现队列 589
14.5.4 由循环数组实现队列 590
14.6 栈和队列的应用 590
14.6.1 平衡括号 590
14.6.2 逆波兰表达式求值 591
14.6.3 代数表达式求值 593
14.6.4 回溯 596
本章小结 598
复习题 599
练习题 601
编程项目 603
第15章 集合、映射和哈希表 617
15.1 集合 617
15.2 映射 619
15.3 实现哈希表 624
15.3.1 哈希码 624
15.3.2 哈希表 625
15.3.3 查找元素 625
15.3.4 添加和移除元素 626
15.3.5 遍历哈希表 626
本章小结 635
复习题 635
练习题 636
编程项目 637
第16章 树结构 641
16.1 树的基本概念 641
16.2 二叉树 644
16.2.1 二叉树示例 644
16.2.2 平衡树 646
16.2.3 二叉树的实现 647
16.3 二叉查找树 648
16.3.1 二分查找的属性 648
16.3.2 插入操作 649
16.3.3 移除操作 651
16.3.4 操作的效率 652
16.4 树遍历 657
16.4.1 中序遍历 657
16.4.2 前序遍历和后序遍历 658
16.4.3 访问者模式 659
16.4.4 深度优先搜索和广度优先搜索 660
16.4.5 树迭代器 661
16.5 红黑树 662
16.5.1 红黑树的基本性质 662
16.5.2 插入操作 664
16.5.3 移除操作 665
本章小结 668
复习题 669
练习题 670
编程项目 671
第17章 优先级队列和堆 711
17.1 优先级队列 711
17.2 堆 713
17.3 堆排序算法 722
本章小结 726
复习题 727
练习题 727
编程项目 728
在线资源一
附录A 保留字小结
附录B 运算符小结
附录C 字符编码
附录D C++库小结
附录E C++语言编程风格指南
附录F 数字系统
术语表

教学资源推荐
作者: [美]罗伯特·哈珀(Robert Harper) 著
作者: Richard C. Detmer
作者: [美]埃里克 S. 罗伯茨(Eric S. Roberts) 著
作者: 杨颂华 熊海灵 主编 杨明 黄春伦 等编著
参考读物推荐
作者: 章立民研究室
作者: 于君泽,曹洪伟,邱硕 等著