“TR1的大小差不多是C++
标准库的2倍。它加入了很多新的功能,甚至是全新类型的库部件。譬如说,在某些TR1类中,有些内嵌类型的存在与否可能会依赖于其模板参数。对于那些仅对C++标准库有经验的程序员来说,这是奇怪而陌生的。本书非常完整(它覆盖了所有的TR1功能),它不仅比TR1本身更容易理解,而且在
技术上也是正确的。”
——Matthew Austern,Google
软件工程师
“TR1可以帮助C++程序员变得比过去更为多产。Pete Becker编写的这本书是对这些组件的终极参考
手册:它们是什么、它们是怎么工作的以及它们可以用在哪里。对于那些想要使用这些标准化组件来提高他们的
生产率和代码质量的人来说,应该把这本书放在其书架上。”
——John Maddock,顾问/程序员
当前的C++标准库使用常用的类和函数对C++语言核心进行扩展。在最近几年里,为了解决C++标准库的局限,我们开发了一系列组件来对C++语言进行更进一步的扩展。这些扩展编入一个全面的技术报告中(TR1),并且其中的大部分已经被C++标准的下一个版本通过了。
本书中,Pete Becker不仅对TR1库中的每一个组件都进行了详细的描写,还解释了基本工具、模板、调用包装器、类型特性、数值、正则表达式以及C语言兼容方面的新功能。通过自己在实现这些组件中所积累的经验,Pete Becker不仅阐明了它们的价值并在需要时对标准加以澄清,还提供了通过测试的完整代码。
本书大部分章节都包含了不同难度的练习来帮助程序员得到这些新组件的实践经验。这些练习的答案以及所有的代码示例都可以在网上找到。附录中不仅为TR1库所包含或扩展的头文件提供了摘要,还介绍了应该怎样在多线程应用程序中安全地使用这些组件。
译者序
前言
第一部分 基 本 工 具
第1章 元组 1
1.1 头文件tuple的摘要 2
1.2 tuple类模板 2
1.3 像tuple一样对std::pair进行存取 10
1.4 练习 12
第2章 智能指针 16
2.1 定义 16
2.2 关于示例 17
2.3 头文件memory的摘要 18
2.4 shared_ptr类模板 19
2.5 类模板weak_ptr 32
2.6 类模板enable_shared_from_this 41
2.7 bad_weak_ptr类 43
2.8 转换 43
2.9 受控资源的析构 48
2.10 异常 50
2.11 多线程 52
2.12 练习 52
第二部分 容 器
第3章
基础知识 59
3.1 STL部件 59
3.2 容器 63
3.3 进一步阅读 66
3.4 练习 66
第4章 类模板array 68
4.1 类模板array概述 70
4.2
信息获取 73
4.3 访问 73
4.4 修改 75
4.5 迭代 76
4.6 内嵌类型名称 77
4.7 比较 79
4.8 与tuple类似的接口 80
4.9 练习 80
第5章 无序关系容器 82
5.1 对散列表进行标准化 82
5.2 散列表 83
5.3 关系容器和无序容器 85
5.4 对无序容器的要求 85
5.5 头文件unordered_map和unordered_set 90
5.6 类模板hash 91
5.7 无序容器的实例化 93
5.8 构造函数 94
5.9 容器操作 94
5.10 负载因子和重散列 97
5.11 优化 98
5.12 进一步阅读 99
5.13 练习 99
第三部分 调用包装器
第6章 调用包装器基础 101
6.1 术语 101
6.2 对可调用类型的要求 103
6.3 头文件functional的摘要 105
6.4 类模板result_of 106
6.5 与现存的函数对象进行交互 108
6.6 练习 111
第7章 mem_fn函数模板 114
第8章 reference_wrapper类模板 120
8.1 创建 121
8.2 内嵌类型 123
8.3 调用 124
8.4 练习 125
第9章 类模板function 127
9.1 构造一个function对象 128
9.2 访问 130
9.3 修改 130
9.4 比较 132
9.5 内嵌类型 133
9.6 调用 133
9.7 目标对象 134
9.8 练习 135
第10章 函数模板bind 137
10.1 占位符 138
10.2 unspecified bind(...) 139
10.3 对bind进行扩展 146
10.4 练习 146
第四部分 类型特性
第11章 类型特性概述 149
11.1 头文件type_traits 151
11.2 辅助类型 153
11.3 基本类型 154
11.4 复合类型 156
11.5 类型属性 156
11.6 类型关系 162
11.7 类型变换 163
11.8 对齐 165
11.9 进一步阅读 166
11.10 练习 166
第五部分 数 值
第12章 数值函数 169
12.1 关于示例 169
12.2 浮点值的表示 170
12.3 管理浮点环境 173
12.4 无穷大、非
规范数、NaN和比较 179
12.5 定义域和值域错误 180
12.6 新的重载规则 180
12.7 基本
数学函数 181
12.8 数学特殊函数 194
12.9 复函数 203
12.10 进一步阅读 208
12.11 练习 208
第13章 随机数生成器 213
13.1 随机数引擎 215
13.2 TR1中的引擎模板 218
13.3 TR1库中的random_device类 224
13.4 TR1库中的预定义引擎 225
13.5 随机数分布 226
13.6 离散分布 228
13.7 连续分布 231
13.8 类模板variate_generator 234
13.9 进一步阅读 238
13.10 练习 239
第六部分 正则表达式
第14章 头文件regex 241
第15章 正则表达式语法 245
15.1 正则表达式结构 246
15.2 语法特性 250
15.3 正则表达式细节 250
15.4 关于练习 256
15.5 练习 257
第16章 正则表达式对象 259
16.1 定义 259
16.2 头文件regex的部分摘要 261
16.3 语法选项 261
16.4 basic_regex类模板 265
16.5 预定义的basic_regex类型 272
16.6 错误处理 272
16.7 练习 274
第17章 查找 276
17.1 头文件regex的部分摘要 278
17.2 完整匹配 279
17.3 查找 280
17.4 查找选项 281
17.5 练习 286
第18章 查找结果 289
18.1 头文件regex的部分摘要 290
18.2 sub_match类模板 291
18.3 预定义的sub_match类型 299
18.4 类模板match_results 300
18.5 练习 307
第19章 重复查找 309
19.1 暴力查找 311
19.2 regex_iterator类模板 317
19.3 regex_token_iterator类模板 326
19.4 练习 335
第20章 格式化和文本替换 337
20.1 格式化选项 340
20.2 格式化文本 341
20.3 文本替换 342
20.4 练习 345
第21章 正则表达式的定制 347
21.1 字符特性 348
21.2 locale 348
21.3 字符匹配 348
21.4 归并 349
21.5 字符类别 350
21.6 regex_traits类模板 351
第七部分 C语言兼容
第22章 C语言兼容 353
22.1 整数类型 353
22.2 64位整数类型 354
22.3 固定大小的整数类型 357
22.4 文本转换 362
22.5 格式化说明符 363
22.6 格式化I-O 368
22.7 字符分类 370
22.8 布尔类型 371
22.9 练习 371
附 录
附录A 头文件 373
附录B 辅助头文件 402
附录C 多线程 407
参考文献 410