Accelerated C++中文版:C++设计新思维

Accelerated C++中文版:C++设计新思维
作 者: 克尼格 靳志伟
出版社: 机械工业出版社
丛编项: C++设计新思维
版权说明: 本书为出版图书,暂不支持在线阅读,请支持正版图书
标 签: C/Turbo C
ISBN 出版时间 包装 开本 页数 字数
未知 暂无 暂无 未知 0 暂无

作者简介

  Andrew Koenig是AT&T公司Shannon实验室大规模编程研究部门中的成员,同时也是C++标准委员会的项目编辑。他的编程经验超过30年,其中有15年在使用C++,他已经出版了超过150篇和C++有关的论文,并且在世界范围内就这个主题进行过多次演讲。

内容简介

为什么本书给人的印象会如此深刻呢?这是因为:一开始就介绍那些最有用的概念,而不是那些简单的注释;读者很快就能够以此开始编程;描述现实中的问题和解决方案,而不是单纯的语言特性;读者不但学习到了这些特性,而且还知道如何把它们应用到程序中去。 涵盖了语言本身和标准库;读者可以从一开始就使用标准库来编写自己的程序。 作者通过在美国斯坦福大学的教学经验证明了这种方法的有效性—在那里,学生们在编程语言第一堂课中就学习到了如何编写真实的程序。 不管你是一个渴望开始学习C++编程的新手,还是一个已经使用C++多年并对它有了很深了解的老手,本书作者独特的教学方法和经验都使得本书应该成为你书架中不可缺少的一员。

图书目录

第0章 入门 1

0.1 注释 1

0.2 #include指令 1

0.3 main函数 2

0.4 花括号 2

0.5 使用标准库来输出 2

0.6 return语句 3

0.7 稍微深入分析“Hello, world!”程序 3

小结 4

练习 6

第1章 使用字符串 7

1.1 输入 7

1.2 为名字装框输出 9

小结 12

练习 12

第2章 循环和计数 14

2.1 问题 14

2.2 程序的总体结构 14

2.3 输出任意多行 15

2.3.1 while语句 16

2.3.2 设计一个while语句 16

2.4 输出一行 18

2.4.1 输出边界字符 19

2.4.2 输出非边界字符 21

2.5 完整的框架程序 22

2.5.1 简化重复的std:: 22

2.5.2 使用for语句来简化 23

2.5.3 精简测试 24

2.5.4 整合结果 24

2.6 计数 25

小结 27

练习 29

第3章 使用批量数据 30

3.1 计算学生成绩 30

3.1.1 检测输入的结束 33

3.1.2 循环不变式 34

3.2 使用中值取代平均值 35

3.2.1 用vector保存数据集 35

3.2.2 生成输出 37

3.2.3 值得注意的地方 40

小结 41

练习 42

第4章 组织程序和数据 43

4.1 组织计算 43

4.1.1 查找中值 44

4.1.2 重新实现计算最终成绩的方法 45

4.1.3 读取家庭作业成绩 47

4.1.4 3种函数形参 49

4.1.5 使用函数来计算学生的成绩 50

4.2 组织数据 52

4.2.1 把一个学生的所有数据集合起来 52

4.2.2 处理学生记录 53

4.2.3 生成报表 55

4.3 把各部分程序连接起来 56

4.4 把计算成绩程序分块 58

4.5 修改后的计算成绩程序 60

小结 61

练习 62

第5章 使用序列式容器并分析字符串 64

5.1 把学生分类 64

5.1.1 就地删除元素 65

5.1.2 顺序访问和随机访问 67

5.2 迭代器 67

5.2.1 迭代器类型 68

5.2.2 迭代器操作 69

5.2.3 一些语法知识 70

5.2.4 students.erase(students.begin()+i)

的含义 70

5.3 使用迭代器取代索引 70

5.4 重新设计数据结构以获取更好的性能 72

5.5 list类型 72

5.5.1 重要的区别 73

5.5.2 为什么要如此麻烦呢 74

5.6 剖析字符串 74

5.7 检测split函数 77

5.8 连接字符串 78

5.8.1 为一个图案装框 78

5.8.2 纵向连接 80

5.8.3 横向连接 81

小结 82

练习 85

第6章 使用库算法 87

6.1 分析字符串 87

6.1.1 分割字符串的另一种方式 89

6.1.2 回文 90

6.1.3 查找URL 91

6.2 比较计算学生成绩的方案 95

6.2.1 处理学生记录 95

6.2.2 分析成绩 96

6.2.3 基于家庭作业成绩的平均值

来计算最终成绩 99

6.2.4 已提交的家庭作业成绩的中值 100

6.3 把学生分类并且重新解决一个问题 101

6.3.1 访问两次的解决方案 101

6.3.2 一次访问的解决方案 103

6.4 算法、容器和迭代器 104

小结 104

练习 106

第7章 使用关联式容器 107

7.1 支持高效查找的容器 107

7.2 字数统计程序 108

7.3 生成一个交叉引用表 109

7.4 生成句子 112

7.4.1 表示规则 113

7.4.2 读取语法 114

7.4.3 生成一个随机的句子 115

7.4.4 选取一个随机元素 117

7.5 注意性能 119

小结 119

练习 120

第8章 编写泛型函数 122

8.1 什么是泛型函数 122

8.1.1 未知类型的中值 123

8.1.2 模板实例化 124

8.1.3 泛型函数和类型 125

8.2 数据结构的独立 126

8.2.1 算法和迭代器 127

8.2.2 顺序只读访问 127

8.2.3 顺序只写访问 128

8.2.4 顺序读写访问 129

8.2.5 可逆访问 130

8.2.6 随机访问 130

8.2.7 迭代器区间和越界值 131

8.3 输入和输出迭代器 132

8.4 使用迭代器来提高灵活性 133

小结 134

练习 135

第9章 定义新类型 137

9.1 回顾Student_info 137

9.2 类 138

9.2.1 成员函数 138

9.2.2 非成员函数 141

9.3 保护 141

9.3.1 访问器函数 142

9.3.2 检测对象是否为空 144

9.4 Student_info类 144

9.5 构造函数 145

9.5.1 默认构造函数 146

9.5.2 带有参数的构造函数 147

9.6 使用Student_info类 147

小结 148

练习 149

第10章 管理内存和底层数据结构 150

10.1 指针和数组 150

10.1.1 指针 151

10.1.2 指向函数的指针 152

10.1.3 数组 154

10.1.4 指针的算术运算 155

10.1.5 索引 156

10.1.6 数组初始化 156

10.2 再看字符串直接量 157

10.3 初始化字符指针数组 158

10.4 main函数的参数 159

10.5 读写文件 160

10.5.1 标准错误流 160

10.5.2 处理多个输入和输出文件 160

10.6 3种内存管理 162

10.6.1 为一个对象分配和释放内存 163

10.6.2 为数组分配并释放内存 163

小结 165

练习 166

第11章 定义抽象数据类型 167

11.1 Vec类 167

11.2 实现Vec类 167

11.2.1 内存分配 169

11.2.2 构造函数 169

11.2.3 类型定义 170

11.2.4 索引和大小 172

11.2.5 返回迭代器的操作 173

11.3 复制控制 174

11.3.1 复制构造函数 174

11.3.2 赋值 175

11.3.3 赋值不是初始化 177

11.3.4 析构函数 179

11.3.5 默认操作 179

11.3.6 三者缺一不可的规则 180

11.4 动态Vec对象 181

11.5 灵活的内存管理 182

小结 187

练习 188

第12章 使类的对象像数值一样工作 189

12.1 一个简单的string类 189

12.2 自动转换 191

12.3 Str类的操作 192

12.3.1 输入-输出操作符 192

12.3.2 友元 193

12.3.3 其他二元操作符 195

12.3.4 混合类型的表达式 196

12.3.5 定义二元操作符 197

12.4 某些类型转换是危险的 198

12.5 类型转换操作符 199

12.6 类型转换和内存管理 200

小结 202

练习 202

第13章 使用继承和动态绑定 204

13.1 继承 204

13.1.1 保护标签 205

13.1.2 操作 206

13.1.3 继承和构造函数 207

13.2 多态和虚函数 209

13.2.1 不知道对象类型的情况下

取得对象的值 210

13.2.2 动态绑定 211

13.2.3 回顾 212

13.3 使用继承来解决我们的问题 213

13.3.1 包含(实质上)未知类型的容器 215

13.3.2 虚析构函数 217

13.4 一个简单的句柄类 218

13.4.1 读取句柄 220

13.4.2 复制句柄对象 221

13.5 使用句柄类 222

13.6 精妙之处 223

13.6.1 继承和容器 223

13.6.2 我们需要的是哪个函数 224

小结 225

练习 226

第14章 几乎自动的管理内存 228

14.1 复制所指向的对象的句柄 228

14.1.1 一个泛型句柄类 229

14.1.2 使用一个泛型句柄 232

14.2 引用计数句柄 234

14.3 可以决定何时共享数据的句柄 236

14.4 可控制句柄上的一个改进 238

14.4.1 复制不能控制的类型 239

14.4.2 什么时候需要进行复制 241

小结 241

练习 241

第15章 再看字符图形问题 242

15.1 设计 242

15.1.1 使用继承来模拟这种结构 243

15.1.2 Pic_base类 245

15.1.3 派生类 247

15.1.4 复制控制 249

15.2 实现 250

15.2.1 实现用户接口 250

15.2.2 String_Pic类 252

15.2.3 填充输出以补齐 254

15.2.4 VCat_Pic类 255

15.2.5 HCat_Pic类 256

15.2.6 Frame_Pic类 256

15.2.7 不要忘记友元声明 257

小结 259

练习 260

第16章 如何学习C++ 261

16.1 使用已经掌握的知识 261

16.2 学习更多的知识 263

练习 263

附录A 语言细节 264

附录B 标准库概要 279