前言页 1
第一章 C++类库概述 1
1.1 C++标准类库:功能视图 2
1.1.1 面向对象的输入/输出 2
1.1.2 容器类和ADT(抽象数据类型) 7
1.1.3 重要的新ADT(抽象数据类型) 12
1.1.4 存储管理类 20
1.2 标准C++类库的结构视图 28
1.2.1 什么是标准面向对象程序设计方法 30
1.2.2 通用性 32
1.2.3 面向对象的程序设计方法和生成式程序设计方法 33
1.2.4 接口视图 34
1.3 C++语言与标准软件设计(lego) 40
第二章 类的内部结构(Anatomy) 43
2.1 标准C++类库类 44
2.1.1 具体类 46
2.1.2 抽象类 47
2.1.3 接口(适配子)类 48
2.1.4 节点类 50
2.1.5 支持/实用类 51
2.1.6 迭代子类 52
2.1.7 分配器类 54
2.1.8 参数化(模板)类 54
2.1.9 领域类 58
2.2 属性(attribute)、特性(characteristic)和方法(method) 59
2.2.1 私有方式 63
2.2.2 只有成员可以访问 64
2.2.3 对公共开放 64
2.3 小结 64
第三章 IO流(iostreams) 67
3.1 类和IO流 68
3.1.1 流状态组件 69
3.1.2 缓冲组件 69
3.1.3 转换组件 69
3.1.4 流状态类ios_base<T>和basic_ios<T> 70
3.1.5 缓冲类basic_streambuf, basic_filebuf, basic_stringbuf 71
3.1.6 转换类basic_istream和basic_ostream 71
3.2 面向对象的输入/输出 72
3.2.1 抽取符(extractors) 73
3.2.2 cout, wcout和inserters 74
3.3 IO流类层次结构 75
3.4 IO流类型定义(typedefs) 77
3.4.1 basic_streambuf类 77
3.5 最基本的基类ios_base 82
3.5.1 构造basic_ios(ios)对象 84
3.5.2 打开(open)模式 85
3.5.3 ios类的缓冲组件 87
3.5.4 ios类的缓冲状态组件 87
3.5.5 ios类的格式状态(format state)组件 88
3.6 一个面向对象的输入模型 95
3.6.1 构造一个istream对象 96
3.6.2 istream访问函数:流抽取和对象转化 97
3.6.3 抽取运算符 97
3.6.4 抽取转化(translation)和换算(conversion) 98
3.6.5 非格式化抽取 99
3.6.6 岗哨(sentry)对象及ipfx()、isfx()前缀和后缀方法 104
3.7 一个面向对象的输出模式类basic_ostream 104
3.7.1 一个ostream对象的构造 105
3.7.2 插入运算符 105
3.7.3 插入转化和换算 106
3.7.4 basic_ostream类访问函数 108
3.7.5 类iostream=basic_istream+basic_ostream 109
3.7.6 岗哨(sentry)对象及opfx()、osfx()前缀和后缀方法 109
3.8 类ifstream 110
3.8.1 构造ifstream对象 111
3.8.2 访问ifstream类缓冲的方法 112
3.8.3 使用ifstream对象 112
3.8.4 面向对象输出文件的oftream类 115
3.8.5 构造ofstream对象 116
3.8.6 访问ofstream类缓冲的方法 119
3.8.7 类fstream=ifstream + ofstream 119
3.9 文件 119
3.9.1 打开和关闭文件 120
3.9.2 写文本文件 121
3.9.3 读文本文件 121
3.9.4 写二进制文件 122
3.9.5 读二进制文件 123
3.9.6 对二进制文件进行对象的读写 123
3.9.7 类istringstream(内存设备) 124
3.9.8 构造istringstream对象 125
3.9.9 类ostringstream 125
3.9.10 类stringstream=istringstream + ostringstream 127
3.10 控制器(manipulators) 130
3.10.1 换行(new-line)控制器endl 131
3.10.2 空(null)控制器ends 131
3.10.3 刷新流 131
3.10.4 数字格式化控制器 132
3.10.5 跳过空白区(whitc spaces) 132
3.10.6 标志控制器 132
3.10.7 填补(padding)和填充(fill)控制器 133
3.11 小结 135
第四章 串(string)类 137
4.1 串的概念 137
4.1.1 串的表示 139
4.1.2 串类 141
4.2 基本串类 144
4.2.1 基本串类模板参数 144
4.2.2 串类服务 145
4.2.3 串对象的构造 145
4.2.4 用子串构造串对象 148
4.2.5 串分配 149
4.2.6 访问串数据组件 150
4.2.7 访问字符序列 150
4.2.8 访问子串 151
4.2.9 访问有关串对象的信息 153
4.2.10 串对象的内存管理 154
4.2.11 拷贝(copying)和交换(swapping) 156
4.2.12 异常处理 157
4.3 串类的扩展 159
4.4 小结 161
第五章 异常(exception)类 163
5.1 什么是软件错误(Sofeware Error) 163
5.1.1 软件规范(Specifications) 164
5.2 软件失败和异常 165
5.3 测试(testing)、调试(debugging)和异常处理定义 166
5.3.1 错误处理的一般方法 166
5.4 异常类层次结构 167
5.4.1 logic_error类 168
5.4.2 runtime_error类 168
5.4.3 为异常类族分类 170
5.4.4 构造异常类 170
5.4.5 析构异常类 171
5.4.6 赋值和异常类 171
5.5 使用异常类 171
5.5.1 管理异常类 172
5.5.2 具体化(specializing)异常类 172
5.6 处理异常 175
5.6.1 重执模式 176
5.6.2 终止模式 176
5.7 小结 177
第六章 Runtime Type Information类 179
6.1 运行类型信息 180
6.1.1 type_info类 182
6.1.2 bad_typeid类 183
6.1.3 动态强制转换(casting)和bad_cast类 184
6.2 小结 186
第七章 标准C++容器 189
7.1 什么是容器 189
7.1.1 容器类体系结构 190
7.2 顺序存储对象 191
7.2.1 容器和接口视图 192
7.2.2 所有容器公用的通用方法和运算符 192
7.2.3 所有顺序容器公用的通用方法 195
7.2.4 所有联合容器公用的通用方法 196
7.3 容器和自动存储管理 197
7.4 使用顺序容器 198
7.4.1 顺序容器的接口协议 198
7.4.2 构造顺序容器 198
7.4.3 顺序容器和动态分配 201
7.4.4 析构顺序容器 203
7.4.5 顺序插入修改方法 203
7.4.6 顺序删除修改方法 203
7.4.7 其他顺序容器访问方法 204
7.4.8 顺序容器迭代访问方法 204
7.5 面向对象向量 208
7.5.1 为什么向量是很有用的 209
7.5.2 构造一个向量 209
7.5.3 析构一个向量 210
7.5.4 访问向量信息 211
7.5.5 使用修改方法向向量放置对象 214
7.5.6 从容器中移走对象 215
7.5.7 从向量访问对象 215
7.5.8 向量类型的关系操作 218
7.6 双端队列 218
7.6.1 面向对象的队列、优先队列和双端队列 218
7.6.2 标准双端队列 220
7.6.3 构造双端队列 220
7.6.4 访问双端队列信息 220
7.6.5 使用修改方法来向双端队列插入对象 221
7.6.6 双端队列对象访问方法 221
7.7 容器类库适配子(adaptor) 224
7.7.1 什么是适配子 225
7.8 面向对象的堆栈 228
7.8.1 标准堆栈 229
7.9 标准队列 230
7.9.1 优先队列 232
7.10 联合容器 232
7.10.1 使用联合容器 233
7.10.2 标准联合容器的构造函数和析构函数 236
7.10.3 联合容器的插入修改方法 241
7.10.4 联合容器的删除修改方法 241
7.10.5 联合容器的迭代子访问方法 242
7.11 集合容器 242
7.11.1 集合从属关系 243
7.11.2 通用集合对象类型 245
7.12 什么是面向对象的集合 246
7.12.1 集合的逻辑表示和实现 246
7.13 标准集合容器 248
7.13.1 对于内置类型的客户职责 249
7.13.2 对于用户定义类型的客户职责 249
7.13.3 集合的构造函数 250
7.13.4 集合的析构函数 251
7.13.5 集合容器信息的访问 251
7.14 标准多重集容器 258
7.14.1 多重集的插入修改方法 258
7.14.2 多重集的insert()修改方法 258
7.14.3 多重集的erase()修改方法 259
7.14.4 多重集的访问方法 259
7.14.5 多重集的运算符 260
7.15 关系、映像和多重映像 260
7.15.1 映像容器 262
7.15.2 标准映像容器 262
7.15.3 映像的构造函数 264
7.15.4 映像的析构函数 266
7.15.5 映像的信息访问方法 266
7.15.6 映像的插入修改方法 266
7.15.7 erase()修改方法 267
7.15.8 映像对象的访问方法 267
7.16 映像容器的运算符和操作 270
7.17 多重映像容器类 270
7.17.1 标准多重映像容器 271
7.17.2 多重映像的构造函数 271
7.17.3 多重映像的析构函数 272
7.17.4 多重映像容器的信息访问方法 272
7.17.5 多重映像容器的修改方法 272
7.17.6 多重映像容器的其他访问方法 273
7.18 多重映像容器的运算符和操作 274
7.19 小结 274
第八章 迭代子 275
8.1 迭代子处理:顺序和直接访问 277
8.2 使用标准C++库迭代子 278
8.2.1 迭代子分类 281
8.3 迭代子和容器类 292
8.3.1 恒定和可变的迭代子 296
8.4 迭代子适配器 297
8.5 预定义的迭代子类 299
8.5.1 迭代子特性和迭代子类 299
8.5.2 流和流缓冲区迭代子 300
8.5.3 插入迭代子 307
8.5.4 反向迭代子 311
8.5.5 全局方法advance()和distance() 317
8.6 小结 318
第九章 算法库 321
9.1 什么是算法(Algorithms) 321
9.2 算法的重要性 322
9.3 算法的通用性 329
9.4 C++标准算法 329
9.4.1 算法的参数 331
9.5 查找算法 348
9.5.1 顺序查找法 350
9.5.2 对分查找 352
9.5.3 查找用户自定义的对象 354
9.6 排序算法 362
9.6.1 排序特征 364
9.6.2 空间需求 364
9.6.3 排序的稳定性 365
9.6.4 标准类库排序的分类 366
9.6.5 排序算法的使用 367
9.7 集合算法 368
9.7.1 集合操作 370
9.8 容器管理算法 373
9.9 算法设计的考虑 376
9.9.1 所有算法的5种需要 376
9.9.2 算法和类方法的关系 377
9.9.3 算法组件 380
9.10 小结 383
第十章 内存管理 385
10.1 C++中的动态内存分配 386
10.1.1 C++中的静态内存分配 387
10.1.2 对象的动态内存分配 388
10.2 分配算符类 389
10.2.1 分配算符类 391
10.2.2 分配算符类型定义成员 393
10.2.3 分配算符类的成员函数 394
10.3 Auto_ptr类 399
10.3.1 auto_ptr对象的构造函数 400
10.3.2 使用auto_ptr 403
10.4 小结 406
第十一章 数字(numerics)类 409
11.1 数值界限(numeric_limits)类 409
11.2 数值数组(valarray)类 412
11.2.1 数值数组类组 412
11.2.2 向量操作与数值数组类 413
11.2.3 构造数组对象 416
11.2.4 重要的数值数组访问方法 416
11.2.5 数值数组的修改 417
11.3 复制(complex)类 418
11.4 小结 421
第十二章 语言支持 423
12.1 国际化与本地化 424
12.2 标准C++类的国际化支持 425
12.2.1 facet类 426
12.2.2 比较(collate)facet类 429
12.2.3 Ctype facet类 432
12.2.4 数字facet类 434
12.2.5 货币(monetary)facet类 437
12.2.6 时间facet类 438
12.2.7 消息facet类 439
12.3 创建并使用方面对象 440
12.4 现场(locale)类 441
12.4.1 构造现场对象 442
12.4.2 现场运算符 443
12.4.3 全局的和典型的现场 443
12.4.4 访问现场方面 444
12.4.5 流的方面 444
12.5 char_traits类 445
12.5.1 char_traits的方法 446
12.6 小结 447
第十三章 用Java连接(interfacing)C++ 449
13.1 Java API 450
13.2 C++与Java的通信 450
13.3 Java本地接口(Java Native Interface) 451
13.3.1 请求API 451
13.4 一个JNI的例子 458
第十四章 综述 463
14.1 新的ANSI/ISO标准 463
14.2 IO流类的变化 464
14.2.1 注意Narrow与Wide的差异 464
14.2.2 IO流的类型定义(typedef) 464
14.2.3 新的缺省流声明 466
14.2.4 IO流和异常 466
14.3 新类 466
14.4 标准C++类库的3个视图(view) 466
14.4.1 新的体系结构视图 467
14.4.2 接口视图 467
14.5 标准C++类和Java类集成 468
14.6 图示C++类和对象层次结构 468
14.7 编译器的兼容性、可移植性和展望 469
14.8 仅仅是个开始 469