第0章 开始 1
0.1注释 1
0.2 #include指令 2
0.3主函数main 2
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查找URL 107
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