第1章 类 1
1.1 简介 1
1.2 面向对象设计的原则 2
1.2.1 抽象 2
1.2.2 封装 3
1.2.3 模块化 4
1.3 类和对象 5
1.4 构造函数和析构函数的示例 6
1.5 实现细节 9
1.6 模板 11
1.6.1 类模板 11
1.6.2 涵数模板 14
1.6.3 模板的另一种选择:void*类型 15
1.7 复数的抽象 18
1.8 改进复数类设计的建议 23
1.9 异常和异常处理 26
1.10 类的静态(static)成员 30
1.10.1 静态数据成员 30
1.10.2 静态成员函数 32
1.11 本章小结 35
1.12 练习 36
1.13 程序设计项目 42
第2章 继承和多态性 43
2.1 简介 43
2.2 继承、基类和派生类 44
2.3 公有继承 46
2.4 基类的保护成员 48
2.5 私有和保护继承 53
2.6 多继承 54
2.7 多态性和虚函数 58
2.8 纯虚函数和抽象类 61
2.9 继承和多态性在软件工程中的含义 68
2.10 本章小结 68
2.11 练习 69
2.12 程序设计项目 82
3.2 算法的概念 83
3.1 简介 83
第3章 搜索和排序 83
3.3 使用类和对象进行设计 84
3.4 效率问题的初步讨论 85
3.5 有限归纳法 85
3.6 比较算法:大O符号 86
3.7 数组的搜索算法:线性(顺序)搜索 87
3.8 线性搜索的分析 88
3.9 递归程序设计的回顾 89
3.10 二叉搜索 91
3.11 二叉搜索分析 93
3.12 排序算法:选择排序和插入排序 94
3.14 快速排序和递归算法 96
3.13 选择排序和插入排序的分析 96
3.15 快速排序 101
3.16 合并排序 102
3.17 合并排序的分析 106
3.18 本章小结 107
3.19 练习 108
3.20 程序设计项目 111
第4章 散列:标准模板库的前奏 113
4.1 简介 113
4.2 散列:数据存储和检索的有效方法 113
4.3.1 方法l:平方取中法 116
4.3 选择合适的散列函数 116
4.3.2 方法2:随机数生成器 117
4.3.3 方法3:折叠 117
4.3.4 方法4:求余数法 117
4.4 解决散列冲突的方法 118
4.5 使用存储桶和链表来解决散列冲突 121
4.5.1 存储桶 121
4.5.2 链接实现:分离链 122
4.6 用类模板来实现散列 124
4.7 命名空间 130
4.7.1 有关命名空间的一般观点 133
4.7.2 主要观点 137
4.9 练习 138
4.8 本章小结 138
4.10 程序设计项目 142
第5章 STL中的组件概述 143
5.1 历史回顾 143
5.2 STL及其重要性概述 143
5.3 容器 144
5.4 迭代器 145
5.5 迭代器的描述和分类 148
5.5.1 输入迭代器 148
5.5.2 输出迭代器 149
5.5.3 前向迭代器 150
5.5.4 双向迭代器 151
5.5.5 随机访问迭代器 153
5.5.6 流迭代器 156
5.6 算法 158
5.7 函数对象 161
5.8 适配器 168
5.8.1 容器适配器 168
5.8.2 迭代器适配器 168
5.8.3 函数适配器 170
5.9 本章小结 171
5.10 练习 172
5.11 程序设计项目 175
6.2 Vector类模板 176
6.1 简介 176
第6章 队列容器 176
6.3 Vector的构造函数:显式声明 177
6.4 向量的其他成员函数 181
6.4.1 存取函数 181
6.4.2 修改函数 183
6.4.3 内存分配函数 188
6.4.4 比较函数 189
6.5 类Vector的应用 190
6.6 双端队列简介 193
6.7 类deque的应用:伪随机数和随机数 194
6.8 STL列表的介绍 197
6.9 标准类模板库list:基本成员函数 198
6.9.1 构造函数、析构函数、迭代器 198
6.9.2 存取函数 200
6.9.3 修改函数 201
6.10.1 合并两个排序列表 202
6.10 标准模板库list:更多的专用成员函数 202
6.9.5 比较操作 202
6.9.4 更多的迭代器 202
6.10.2 拼接两个列表 203
6.10.3 倒排列表 206
6.10.4 排序列表 206
6.10.5 删除连续的复制列表值 207
6.10.6 删除列表中的值 207
6.11 类模板list的应用:生成奇正整数和偶正整数的随机排序 209
6.12 本章小结 212
6.13 练习 213
6.14 程序设计项日 218
第7章 容器适配器 219
7.1 简介 219
7.2 栈抽象 219
7.3 使用栈容器适配器来实现栈 220
7.5 队列抽象 233
7.6 使用STL的队列容器适配器实现队列 233
7.7 ADT队列的应用 234
7.8 优先队列抽象 244
7.9 优先队列ADT的应用 245
7.10 本章小结 252
7.11 练习 252
7.12 程序设计项目 255
8.1 简介 256
8.2 概述标准库中的泛型算法 256
第8章 泛型算法 256
8.3 非变异队列算法 257
8.3.1 find算法及其变种:Helper(帮助)函数 257
8.3.2 count算法及其变种 264
8.3.3 泛型算法for_each 265
8.3.4 比较两个区间:
8.3.5 泛型算法search 268
8.4 变异队列算法 269
8.4.1 泛型算法copy和copy_backward 270
8.4.2 泛型算法fill和fill_n 272
8.4.3 generate算法 273
8.4.4 partition和stable_partition算法 274
8.4.5 random_shuffle算法 275
8.4.6 remove算法及其变种 276
8.4.7 replace算法及其变种 277
8.4.8 reverse和reverse_copy算法 278
8.4.9 rotate算法 279
8.4.10 泛型交换算法 280
8.4.11 transform算法 282
8.4.12 unique算法及其变种 282
8.5 与排序相关的算法 283
8.5.1 泛型算法sort、stable_sort和partial_sort 284
8.5.2 泛型算法nth_element 287
8.5.3 泛型二叉搜索算法 288
7.4 栈ADT的应用 291
8.5.4 合并两个已排序队列的算法 292
8.5.5 堆的泛型算法 294
8.6 通用数值算法 296
8.6.1 accumulate函数 297
8.6.2 内积函数 297
8.6.3 partial sum算法 298
8.6.4 adjacent_difference算法 299
8.7 本章小结 300
8.8 练习 301
8.9 程序设计项目 305
第9章 排序关联容器 306
9.1 简介 306
9.2 集和多集 307
9.3 集操作 316
9.3.1 集包含 316
9.3.2 并集 317
9.3.3 交集 318
9.3.4 差集 320
9.4 二叉搜索树和红-黑树的实现细节 321
9.5 映射和多重映射 328
9.6 应用程序 334
9.7 本章小结 342
9.8 练习 343
9.9 程序设计项目 344
附录 局域网模拟器 346
A.1 介绍性的概念 346
A.2 基本设计成员 347
A.3 用户接口 349
A.4 实现细节 351
A.5 典型执行的描述 358
术语表 360