出版时间:2012-7 出版社:科学出版社 作者:(美)Andrew Koenig,Barbara E. Moo 页数:336 字数:535000 译者:张明
Tag标签:无
内容概要
为何本书让人如此印象深刻?因为:
◎ 它开门见山,向读者介绍那些最有用的概念,而不是基础内容;读者很快就能上手编程。
◎
它描述了现实世界的问题并提出解决方案,而不是单纯讲述语言特性;由此,读者不但学习了这些特性,而且知道如何在程序中使用它们。
◎ 它涵盖的范围同时包括了语言本身和标准库;读者从一开始就可以使用标准库编写程序。
作者通过他们在美国斯坦福大学的专业培训课程证明了本书学习方法的有效性,学生们在他们的第一堂课中就学习了如何编写真实的应用程序。
无论您是一个渴望开始编写第一个C++程序的新手,还是一个已经使用C++多年并希望深入探讨它的老手,两位作者独特的介绍方法和专业知识都让本书成为您书架中不可或缺的学习参考书。
作者简介
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章 开始
0.1 注释
0.2 #include指令
0.3 主函数main
0.4 花括号
0.5 使用标准库进行输出
0.6 返回语句
0.7 进一步的深入
0.8 小结
练习
第1章 字符串的使用
1.1 输入
1.2 将姓名装框
1.3 小结
练习
第2章 循环与计数
2.1 问题
2.2 程序的整体结构
2.3 输出数目未知的行
2.3.1 while语句
2.3.2 设计while语句
2.4 输出一行
2.4.1 输出边界字符
2.4.2 输出非边界字符
2.5 完整的框架程序
2.5.1 略去重复使用的std::
2.5.2 使用for语句缩短程序
2.5.3 压缩检测
2.5.4 完整的框架程序
2.6 计数
2.7 小结
练习
第3章 使用批量数据
3.1 计算学生成绩
3.1.1 检测输入
3.1.2 循环不变式
3.2 用中值代替平均值
3.2.1 将数据集合存储到向量中
3.2.2 产生输出
3.2.3 更加深入的观察
3.3 小结
练习
第4章 组织程序和数据
4.1 组织计算
4.1.1 查找中值
4.1.2 重新制定计算成绩的策略
4.1.3 读家庭作业成绩
4.1.4 三种函数参数
4.1.5 使用函数来计算学生的成绩
4.2 组织数据
4.2.1 将一个学生的所有数据放置在一起
4.2.2 处理学生记录
4.2.3 生成报表
4.3 将各部分代码连接到一起
4.4 将计算成绩的程序分块
4.5 修正后的计算成绩程序
4.6 小结
练习
第5章 使用顺序容器和分析字符串
5.1 将学生进行分类
5.1.1 就地删除元素
5.1.2 顺序存取和随机存取
5.2 迭代器
5.2.1 迭代器的类型
5.2.2 迭代器的操作
5.2.3 一些语法知识
5.2.4 students.erase(students.begin()+i)的含义
5.3 用迭代器代替索引
5.4 重新思考数据结构以实现更好的性能
5.5 list类型
5.5.1 一些重要的差别
5.5.2 一个恼人的话题
5.6 分割字符串
5.7 测试split函数
5.8 连接字符串
5.8.1 将图案装框
5.8.2 纵向连接
5.8.3 横向连接
5.9 小结
练习
第6章 使用库算法
6.1 分析字符串
6.1.1 实现split的另一种方法
6.1.2 回文
6.1.3 查找URL
6.2 比较计算成绩的方案
6.2.1 处理学生记录
6.2.2 分析成绩
6.2.3 计算基于家庭作业平均成绩的总成绩
6.2.4 上交的家庭作业的中值
6.3 对学生进行分类并回顾我们的问题
6.3.1 一种两次传递的解决方案
6.3.2 一种一次传递的解决方案
6.4 算法、容器以及迭代器
6.5 小结
练习
第7章 使用关联容器
7.1 支持高效查找的容器
7.2 计算单词数量
7.3 生成交叉引用表
7.4 生成语句
7.4.1 呈现规则
7.4.2 读入文法
7.4.3 生成语句
7.4.4 选择随机元素
7.5 关于性能的一些说明
7.6 小结
练习
第8章 编写泛型函数
8.1 什么是泛型函数
8.1.1 未知类型的中值
8.1.2 模板实例化
8.1.3 泛型函数和类型
8.2 数据结构独立性
8.2.1 算法与迭代器
8.2.2 顺序只读访问
8.2.3 顺序只写访问
8.2.4 顺序读-写访问
8.2.5 可逆访问
8.2.6 随机访问
8.2.7 迭代器区间和越界值
8.3 输入和输出迭代器
8.4 使用迭代器提高适应性
8.5 小结
练习
第9章 定义新类型
9.1 Student_info回顾
9.2 自定义类型
9.2.1 成员函数
9.2.2 非成员函数
9.3 保护
9.3.1 存取器函数
9.3.2 检查对象是否为空
9.4 Student_info类
9.5 构造函数
9.5.1 默认构造函数
9.5.2 带参数的构造函数
9.6 使用Student_info类
9.7 小结
练习
第10章 管理内存与低级数据结构
10.1 指针与数组
10.1.1 指针
10.1.2 指向函数的指针
10.1.3 数组
10.1.4 指针算法
10.1.5 索引
10.1.6 数组初始化
10.2 字符串字面量回顾
10.3 初始化字符串指针数组
10.4 main函数的参数
10.5 文件读写
10.5.1 标准错误流
10.5.2 处理多个输入/输出文件
10.6 内存管理的三种方法
10.6.1 为对象分配/释放内存
10.6.2 为数组分配/释放内存
10.7 小结
练习
第11章 定义抽象数据类型
11.1 Vec类
11.2 实现Vec类
11.2.1 内存分配
11.2.2 构造函数
11.2.3 类型定义
11.2.4 索引与大小
11.2.5 返回迭代器的操作
11.3 复制控制
11.3.1 复制构造函数
11.3.2 赋值运算符
11.3.3 赋值不是初始化
11.3.4 析构函数
11.3.5 默认操作
11.3.6 三位一体规则
11.4 动态的Vec类型对象
11.5 灵活的内存管理
11.6 小结
练习
第12章 使类对象获得数值功能
12.1 一个简单的string类
12.2 自动转换
12.3 Str操作
12.3.1 输入和输出运算符
12.3.2 友元函数
12.3.3 其他二元运算符
12.3.4 混合类型表达式
12.3.5 设计二元运算符
12.4 有些转换是危险的
12.5 类型转换操作函数
12.6 类型转换与内存管理
12.7 小结
练习
第13章 继承与动态绑定的使用
13.1 继承
13.1.1 回顾保护类型
13.1.2 操作函数
13.1.3 继承与构造函数
13.2 多态与虚拟函数
13.2.1 在不确定对象类型时获得对象的值
13.2.2 动态绑定
13.2.3 简单回顾
13.3 使用继承解决问题
13.3.1 实际类型待定的容器
13.3.2 虚拟析构函数
13.4 一个简单的句柄类
13.4.1 读取句柄
13.4.2 复制句柄对象
13.5 使用句柄类
13.6 微妙之处
13.6.1 继承与容器
13.6.2 需要哪个函数
13.7 小结
练习
第14章 近乎自动地管理内存
14.1 用于复制对象的句柄
14.1.1 通用句柄类
14.1.2 使用通用句柄
14.2 引用计数句柄
14.3 可以让您决定何时共享数据的句柄
14.4 可控句柄的一个改进
14.4.1 复制我们无法控制的类型
14.4.2 复制在何时才是必要的
14.5 小结
练习
第15章 再探字符图形
15.1 设计
15.1.1 使用继承来模拟结构
15.1.2 Pic_base类
15.1.3 派生类
15.1.4 复制控制
15.2 实现
15.2.1 实现用户接口
15.2.2 String_Pic类
15.2.3 补齐输出结果
15.2.4 VCat_Pic类
15.2.5 HCat_Pic类
15.2.6 Frame_Pic类
15.2.7 不要忘记友元类声明
15.3 小结
练习
第16章 学习C++的后续方法
16.1 利用已经掌握的知识
16.2 学习更多的知识
练习
附录A C++语法细节
A.1 声明
A.1.1 指定说明
A.1.2 声明符
A.2 类型
A.2.1 整数类型
A.2.2 浮点类型
A.2.3 常量表达式
A.2.4 类型转换
A.2.5 枚举类型
A.2.6 重载
A.3 表达式
A.4 语句
附录B 标准库一览
B.1 输入-输出
B.2 容器和迭代器
B.2.1 共有的容器操作
B.2.2 顺序容器的操作
B.2.3 其他顺序操作
B.2.4 关联容器的操作
B.2.5 迭代器(iterator)
B.2.6 向量(vector)
B.2.7 链表(list)
B.2.8 字符串(string)
B.2.9 对(pair)
B.2.10 图(map)
B.3 算法
章节摘录
版权页: 插图: 当我们说一个特定类型是一个迭代器时,实际上,我们是指关于这种类型所支持操作的性质;只有一种类型以某种特定的方式支持特定的操作集时,这个类型才会是一个迭代器。如果我们想要编写自己的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,斯坦福大学
图书封面
图书标签Tags
无
评论、评分、阅读与下载
Accelerated C++中文版通过示例进行编程实践 PDF格式下载