简介
Boost是一个功能强大、构造精巧、跨平台、开源并且完全免费的C++
程序库,有着“C++‘准’标准库”的美誉。
它由C++标准委员会部分成员所设立的Boost社区开发并维护,使用了
许多现代C++编程技术,内容涵盖字符串处理、正则表达式、容器与数据结
构、并发编程、函数式编程、泛型编程、设计模式实现等许多领域,极大
地丰富了C++的功能和表现力,能够使C++软件开发更加简洁、优雅、灵活
和高效。
本书基于Boost1.42版,介绍了其中的所有99个库,并且详细深入地讲
解了其中数十个库,同时实现了若干颇具实用价值的工具类和函数,可帮
助读者迅速理解掌握Boost的用法以及在实际应用开发工作中。
本书内容丰富、结构严谨、详略得当、讲解透彻,带领读者领略了C++
的最新前沿技术,相信会是每位C++程序员的必备工具书。
目录
第0章 导读 1
0.1 关于本书 1
0.2 读者对象 1
0.3 本书的术语与风格 2
0.4 本书的结构 3
0.5 如何阅读本书 5
第1章 Boost程序库总论 7
1.1 关于Boost 7
1.1.1 什么是Boost 7
1.1.2 安装Boost 8
1.1.3 使用Boost 8
1.2 关于STLport 9
1.2.1 什么是STLport 9
1.2.2 安装STLport 10
1.2.3 使用STLport 10
1.3 开发环境 10
1.3.1 STLport的编译方法 11
1.3.2 Boost的编译方法 11
1.3.3 VisualStudio 2005环境设置 15
第2章 时间与日期 17
2.1 timer库概述 17
2.2 timer 17
2.2.1 用法 18
2.2.2 类摘要 18
2.2.3 使用建议 19
2.3 progress_timer 20
2.3.1 用法 20
2.3.2 类摘要 21
2.3.3 扩展计时精度 21
2.4 progress_display 23
2.4.1 类摘要 24
2.4.2 用法 25
2.4.3 注意事项 26
2.5 date_time库概述 27
2.5.1 编译date_time库 27
2.5.2 date_time库的基本概念 28
2.6 处理日期 29
2.6.1 日期 29
2.6.2 创建日期对象 30
2.6.3 访问日期 31
2.6.4 日期的输出 32
2.6.5 与tm结构的转换 33
2.6.6 日期长度 34
2.6.7 日期运算 35
2.6.8 日期区间 36
2.6.9 日期区间运算 38
2.6.10 日期迭代器 39
2.6.11 其他功能 40
2.6.12 综合运用 40
2.7 处理时间 43
2.7.1 时间长度 43
2.7.2 操作时间长度 45
2.7.3 时间长度的精确度 46
2.7.4 时间点 48
2.7.5 创建时间点对象 48
2.7.6 操作时间点对象 49
2.7.7 与tm、time_t等结构的转换 50
2.7.8 时间区间 51
2.7.9 时间迭代器 51
2.7.10 综合运用 52
2.8 date_time库的高级议题 54
2.8.1 编译配置宏 55
2.8.2 格式化时间 55
2.8.3 本地时间 56
2.8.4 序列化 58
2.9 总结 58
第3章 内存管理 61
3.1 smart_ptr库概述 61
3.1.1 RAII机制 61
3.1.2 智能指针 62
3.2 scoped_ptr 63
3.2.1 类摘要 63
3.2.2 操作函数 64
3.2.3 用法 65
3.2.4 与auto_ptr的区别 66
3.3 scoped_array 67
3.3.1 类摘要 67
3.3.2 用法 68
3.3.3 使用建议 69
3.4 shared_ptr 69
3.4.1 类摘要 70
3.4.2 操作函数 70
3.4.3 用法 72
3.4.4 工厂函数 74
3.4.5 应用于标准容器 75
3.4.6 应用于桥接模式 76
3.4.7 应用于工厂模式 77
3.4.8 定制删除器 78
3.4.9 高级议题 80
3.5 shared_array 81
3.5.1 类摘要 81
3.5.2 用法 82
3.6 weak_ptr 82
3.6.1 类摘要 82
3.6.2 用法 83
3.6.3 获得this的shared_ptr 84
3.7 intrusive_ptr 85
3.8 pool库概述 85
3.9 pool 85
3.9.1 类摘要 86
3.9.2 操作函数 86
3.9.3 用法 87
3.10 object_pool 88
3.10.1 类摘要 88
3.10.2 操作函数 88
3.10.3 用法 89
3.10.4 使用更多的构造参数 90
3.11 singleton_pool 91
3.11.1 类摘要 91
3.11.2 用法 92
3.12 pool_alloc 93
3.13 总结 93
第4章 实用工具 95
4.1 noncopyable 95
4.1.1 原理 96
4.1.2 用法 96
4.2 typeof 97
4.2.1 动机 97
4.2.2 用法 99
4.2.3 向typeof库注册自定义类 100
4.2.4 高级议题 101
4.3 optional 101
4.3.1 “无意义”的值 101
4.3.2 类摘要 102
4.3.3 操作函数 102
4.3.4 用法 103
4.3.5 工厂函数 104
4.3.6 高级议题 105
4.4 assign 106
4.4.1 使用操作符+=向容器增加元素 106
4.4.2 使用操作符()向容器增加元素 107
4.4.3 初始化容器元素 108
4.4.4 减少重复输入 110
4.4.5 与非标准容器工作 111
4.4.6 高级用法 112
4.5 swap 113
4.5.1 原理 113
4.5.2 交换数组 114
4.5.3 特化std::swap 114
4.5.4 特化ADL可找到的swap 115
4.5.5 使用建议 116
4.6 singleton 116
4.6.1 boost.pool的单件实现 117
4.6.2 boost.serialzation的单件实现 119
4.7 tribool 120
4.7.1 类摘要 121
4.7.2 用法 122
4.7.3 为第三态更名 122
4.7.4 输入输出 123
4.7.5 与optional的区别 124
4.8 operators 125
4.8.1 基本运算概念 126
4.8.2 算术操作符的用法 127
4.8.3 基类链 129
4.8.4 复合运算概念 130
4.8.5 相等与等价 131
4.8.6 解引用操作符 133
4.8.7 下标操作符 134
4.8.8 高级议题 135
4.9 exception 136
4.9.1 标准库中的异常 137
4.9.2 类摘要 137
4.9.3 向异常传递信息 139
4.9.4 更进一步的用法 140
4.9.5 包装标准异常 142
4.9.6 使用函数抛出异常 143
4.9.7 获得更多的调试信息 144
4.9.8 高级议题 145
4.10 uuid 146
4.10.1 类摘要 147
4.10.2 用法 148
4.10.3 生成器 150
4.10.4 增强的uuid类 152
4.10.5 与字符串的转换 153
4.10.6 SHA1摘要算法 154
4.11 config 155
4.11.1 BOOST_STRINGIZE 155
4.11.2 BOOST_STATIC_CONSTANT 155
4.11.3 禁止编译器警告 156
4.11.4 其他工具 157
4.12 utility 157
4.12.1 BOOST_BINARY 157
4.12.2 BOOST_CURRENT_FUNCTION 158
4.13 总结 160
第5章 字符串与文本处理 163
5.1 lexical_cast 163
5.1.1 用法 164
5.1.2 异常bad_lexical_cast 165
5.1.3 对转换对象的要求 166
5.1.4 应用于自己的类 166
5.2 format 167
5.2.1 简单的例子 168
5.2.2 输入操作符% 169
5.2.3 类摘要 171
5.2.4 格式化语法 172
5.2.5 format的性能 173
5.2.6 高级用法 173
5.3 string_algo 175
5.3.1 简单的例子 175
5.3.2 string_algo概述 176
5.3.3 大小写转换 177
5.3.4 判断式(算法) 178
5.3.5 判断式(函数对象) 179
5.3.6 分类 180
5.3.7 修剪 181
5.3.8 查找 182
5.3.9 替换与删除 184
5.3.10 分割 186
5.3.11 合并 187
5.3.12 查找(分割)迭代器 188
5.4 tokenizer 189
5.4.1 类摘要 190
5.4.2 用法 190
5.4.3 分词函数对象 191
5.4.4 char_separator 192
5.4.5 escaped_list_separator 193
5.4.6 offset_separator 193
5.4.7 tokenizer库的缺陷 195
5.5 xpressive 196
5.5.1 两种使用方式 197
5.5.2 正则表达式语法简介 197
5.5.3 类摘要 199
5.5.4 匹配 201
5.5.5 查找 203
5.5.6 替换 204
5.5.7 迭代 206
5.5.8 分词 207
5.5.9 与regex的区别 208
5.5.10 高级议题 209
5.6 总结 211
第6章 正确性与测试 213
6.1 assert 213
6.1.1 基本用法 213
6.1.2 禁用断言 214
6.1.3 扩展用法 215
6.1.4 BOOST_VERIFY 216
6.2 static_assert 217
6.2.1 用法 217
6.2.2 使用建议 218
6.3 test 219
6.3.1 编译test库 219
6.3.2 最小化的测试套件 220
6.3.3 单元测试框架简介 221
6.3.4 测试断言 222
6.3.5 测试用例与套件 223
6.3.6 测试实例 224
6.3.7 测试夹具 226
6.3.8 测试日志 228
6.3.9 运行参数 229
6.3.10 函数执行监视器 230
6.3.11 程序执行监视器 233
6.3.12 高级议题 234
6.4 总结 236
第7章 容器与数据结构 239
7.1 array 239
7.1.1 类摘要 240
7.1.2 操作函数 240
7.1.3 用法 241
7.1.4 能力限制 242
7.1.5 array的初始化 242
7.1.6 实现ref_array 243
7.1.7 ref_array的用法 244
7.2 dynamic_bitset 245
7.2.1 类摘要 245
7.2.2 创建与赋值 247
7.2.3 容器操作 248
7.2.4 位运算与比较运算 249
7.2.5 访问元素 249
7.2.6 类型转换 251
7.2.7 集合操作 251
7.2.8 综合运用 252
7.3 unordered 253
7.3.1 散列集合简介 254
7.3.2 散列集合的用法 255
7.3.3 散列映射简介 256
7.3.4 散列映射的用法 256
7.3.5 性能比较 257
7.3.6 高级议题 259
7.4 bimap 261
7.4.1 类摘要 261
7.4.2 基本用法 262
7.4.3 值的集合类型 263
7.4.4 集合类型的用法 264
7.4.5 使用标签类型 266
7.4.6 使用assign库 267
7.4.7 查找与替换 268
7.4.8 投射 269
7.4.9 高级议题 270
7.5 circular_buffer 271
7.5.1 类摘要 271
7.5.2 用法 272
7.5.3 环型缓冲区 273
7.5.4 空间优化型缓冲区 275
7.6 tuple 275
7.6.1 最简单的tuple:pair 276
7.6.2 类摘要 276
7.6.3 创建与赋值 277
7.6.4 访问元素 278
7.6.5 比较操作 279
7.6.6 输入输出 280
7.6.7 连结变量 281
7.6.8 应用于assign库 282
7.6.9 应用于exception库 282
7.6.10 内部结构 282
7.6.11 使用访问者模式 284
7.6.12 高级议题 285
7.7 any 287
7.7.1 类摘要 287
7.7.2 访问元素 288
7.7.3 用法 289
7.7.4 简化的操作函数 290
7.7.5 保存指针 291
7.7.6 输出 292
7.7.7 应用于容器 294
7.8 variant 294
7.8.1 类摘要 294
7.8.2 访问元素 295
7.8.3 用法 296
7.8.4 访问器 297
7.8.5 与any的区别 300
7.8.6 高级议题 300
7.9 multi_array 302
7.9.1 类摘要 302
7.9.2 用法 304
7.9.3 多维数组生成器 306
7.9.4 改变形状和大小 307
7.9.5 创建子视图 308
7.9.6 适配普通数组 310
7.9.7 高级议题 311
7.10 property_tree 314
7.10.1 类摘要 315
7.10.2 读取配置信息 316
7.10.3 写入配置信息 318
7.10.4 更多用法 319
7.10.5 XML数据格式 320
7.10.6 其他数据格式 321
7.10.7 高级议题 323
7.11 总结 324
第8章 算法 327
8.1 foreach 327
8.1.1 用法 328
8.1.2 详细解说 329
8.1.3 使用typeof 329
8.1.4 更优雅的名字 330
8.1.5 支持的序列类型 331
8.1.6 一个小问题 332
8.2 minmax 332
8.2.1 用法 333
8.2.2 使用tuples::tie 334
8.3 minmax_element 334
8.3.1 用法 334
8.3.2 其他函数的用法 335
8.4 总结 336
第9章 数学与数字 337
第10章 操作系统相关 371
第11章 函数与回调 419
第12章 并发编程 467
第13章 编程语言支持 513
第14章 其他Boost组件 537
第15章 Boost与设计模式 547
第16章 结束语 559
附录A 推荐书目 565
附录B 网络资源 567
附录C C++标准简述 569
附录D STL简述 571
附录E ref_array实现代码 573
0.1 关于本书 1
0.2 读者对象 1
0.3 本书的术语与风格 2
0.4 本书的结构 3
0.5 如何阅读本书 5
第1章 Boost程序库总论 7
1.1 关于Boost 7
1.1.1 什么是Boost 7
1.1.2 安装Boost 8
1.1.3 使用Boost 8
1.2 关于STLport 9
1.2.1 什么是STLport 9
1.2.2 安装STLport 10
1.2.3 使用STLport 10
1.3 开发环境 10
1.3.1 STLport的编译方法 11
1.3.2 Boost的编译方法 11
1.3.3 VisualStudio 2005环境设置 15
第2章 时间与日期 17
2.1 timer库概述 17
2.2 timer 17
2.2.1 用法 18
2.2.2 类摘要 18
2.2.3 使用建议 19
2.3 progress_timer 20
2.3.1 用法 20
2.3.2 类摘要 21
2.3.3 扩展计时精度 21
2.4 progress_display 23
2.4.1 类摘要 24
2.4.2 用法 25
2.4.3 注意事项 26
2.5 date_time库概述 27
2.5.1 编译date_time库 27
2.5.2 date_time库的基本概念 28
2.6 处理日期 29
2.6.1 日期 29
2.6.2 创建日期对象 30
2.6.3 访问日期 31
2.6.4 日期的输出 32
2.6.5 与tm结构的转换 33
2.6.6 日期长度 34
2.6.7 日期运算 35
2.6.8 日期区间 36
2.6.9 日期区间运算 38
2.6.10 日期迭代器 39
2.6.11 其他功能 40
2.6.12 综合运用 40
2.7 处理时间 43
2.7.1 时间长度 43
2.7.2 操作时间长度 45
2.7.3 时间长度的精确度 46
2.7.4 时间点 48
2.7.5 创建时间点对象 48
2.7.6 操作时间点对象 49
2.7.7 与tm、time_t等结构的转换 50
2.7.8 时间区间 51
2.7.9 时间迭代器 51
2.7.10 综合运用 52
2.8 date_time库的高级议题 54
2.8.1 编译配置宏 55
2.8.2 格式化时间 55
2.8.3 本地时间 56
2.8.4 序列化 58
2.9 总结 58
第3章 内存管理 61
3.1 smart_ptr库概述 61
3.1.1 RAII机制 61
3.1.2 智能指针 62
3.2 scoped_ptr 63
3.2.1 类摘要 63
3.2.2 操作函数 64
3.2.3 用法 65
3.2.4 与auto_ptr的区别 66
3.3 scoped_array 67
3.3.1 类摘要 67
3.3.2 用法 68
3.3.3 使用建议 69
3.4 shared_ptr 69
3.4.1 类摘要 70
3.4.2 操作函数 70
3.4.3 用法 72
3.4.4 工厂函数 74
3.4.5 应用于标准容器 75
3.4.6 应用于桥接模式 76
3.4.7 应用于工厂模式 77
3.4.8 定制删除器 78
3.4.9 高级议题 80
3.5 shared_array 81
3.5.1 类摘要 81
3.5.2 用法 82
3.6 weak_ptr 82
3.6.1 类摘要 82
3.6.2 用法 83
3.6.3 获得this的shared_ptr 84
3.7 intrusive_ptr 85
3.8 pool库概述 85
3.9 pool 85
3.9.1 类摘要 86
3.9.2 操作函数 86
3.9.3 用法 87
3.10 object_pool 88
3.10.1 类摘要 88
3.10.2 操作函数 88
3.10.3 用法 89
3.10.4 使用更多的构造参数 90
3.11 singleton_pool 91
3.11.1 类摘要 91
3.11.2 用法 92
3.12 pool_alloc 93
3.13 总结 93
第4章 实用工具 95
4.1 noncopyable 95
4.1.1 原理 96
4.1.2 用法 96
4.2 typeof 97
4.2.1 动机 97
4.2.2 用法 99
4.2.3 向typeof库注册自定义类 100
4.2.4 高级议题 101
4.3 optional 101
4.3.1 “无意义”的值 101
4.3.2 类摘要 102
4.3.3 操作函数 102
4.3.4 用法 103
4.3.5 工厂函数 104
4.3.6 高级议题 105
4.4 assign 106
4.4.1 使用操作符+=向容器增加元素 106
4.4.2 使用操作符()向容器增加元素 107
4.4.3 初始化容器元素 108
4.4.4 减少重复输入 110
4.4.5 与非标准容器工作 111
4.4.6 高级用法 112
4.5 swap 113
4.5.1 原理 113
4.5.2 交换数组 114
4.5.3 特化std::swap 114
4.5.4 特化ADL可找到的swap 115
4.5.5 使用建议 116
4.6 singleton 116
4.6.1 boost.pool的单件实现 117
4.6.2 boost.serialzation的单件实现 119
4.7 tribool 120
4.7.1 类摘要 121
4.7.2 用法 122
4.7.3 为第三态更名 122
4.7.4 输入输出 123
4.7.5 与optional的区别 124
4.8 operators 125
4.8.1 基本运算概念 126
4.8.2 算术操作符的用法 127
4.8.3 基类链 129
4.8.4 复合运算概念 130
4.8.5 相等与等价 131
4.8.6 解引用操作符 133
4.8.7 下标操作符 134
4.8.8 高级议题 135
4.9 exception 136
4.9.1 标准库中的异常 137
4.9.2 类摘要 137
4.9.3 向异常传递信息 139
4.9.4 更进一步的用法 140
4.9.5 包装标准异常 142
4.9.6 使用函数抛出异常 143
4.9.7 获得更多的调试信息 144
4.9.8 高级议题 145
4.10 uuid 146
4.10.1 类摘要 147
4.10.2 用法 148
4.10.3 生成器 150
4.10.4 增强的uuid类 152
4.10.5 与字符串的转换 153
4.10.6 SHA1摘要算法 154
4.11 config 155
4.11.1 BOOST_STRINGIZE 155
4.11.2 BOOST_STATIC_CONSTANT 155
4.11.3 禁止编译器警告 156
4.11.4 其他工具 157
4.12 utility 157
4.12.1 BOOST_BINARY 157
4.12.2 BOOST_CURRENT_FUNCTION 158
4.13 总结 160
第5章 字符串与文本处理 163
5.1 lexical_cast 163
5.1.1 用法 164
5.1.2 异常bad_lexical_cast 165
5.1.3 对转换对象的要求 166
5.1.4 应用于自己的类 166
5.2 format 167
5.2.1 简单的例子 168
5.2.2 输入操作符% 169
5.2.3 类摘要 171
5.2.4 格式化语法 172
5.2.5 format的性能 173
5.2.6 高级用法 173
5.3 string_algo 175
5.3.1 简单的例子 175
5.3.2 string_algo概述 176
5.3.3 大小写转换 177
5.3.4 判断式(算法) 178
5.3.5 判断式(函数对象) 179
5.3.6 分类 180
5.3.7 修剪 181
5.3.8 查找 182
5.3.9 替换与删除 184
5.3.10 分割 186
5.3.11 合并 187
5.3.12 查找(分割)迭代器 188
5.4 tokenizer 189
5.4.1 类摘要 190
5.4.2 用法 190
5.4.3 分词函数对象 191
5.4.4 char_separator 192
5.4.5 escaped_list_separator 193
5.4.6 offset_separator 193
5.4.7 tokenizer库的缺陷 195
5.5 xpressive 196
5.5.1 两种使用方式 197
5.5.2 正则表达式语法简介 197
5.5.3 类摘要 199
5.5.4 匹配 201
5.5.5 查找 203
5.5.6 替换 204
5.5.7 迭代 206
5.5.8 分词 207
5.5.9 与regex的区别 208
5.5.10 高级议题 209
5.6 总结 211
第6章 正确性与测试 213
6.1 assert 213
6.1.1 基本用法 213
6.1.2 禁用断言 214
6.1.3 扩展用法 215
6.1.4 BOOST_VERIFY 216
6.2 static_assert 217
6.2.1 用法 217
6.2.2 使用建议 218
6.3 test 219
6.3.1 编译test库 219
6.3.2 最小化的测试套件 220
6.3.3 单元测试框架简介 221
6.3.4 测试断言 222
6.3.5 测试用例与套件 223
6.3.6 测试实例 224
6.3.7 测试夹具 226
6.3.8 测试日志 228
6.3.9 运行参数 229
6.3.10 函数执行监视器 230
6.3.11 程序执行监视器 233
6.3.12 高级议题 234
6.4 总结 236
第7章 容器与数据结构 239
7.1 array 239
7.1.1 类摘要 240
7.1.2 操作函数 240
7.1.3 用法 241
7.1.4 能力限制 242
7.1.5 array的初始化 242
7.1.6 实现ref_array 243
7.1.7 ref_array的用法 244
7.2 dynamic_bitset 245
7.2.1 类摘要 245
7.2.2 创建与赋值 247
7.2.3 容器操作 248
7.2.4 位运算与比较运算 249
7.2.5 访问元素 249
7.2.6 类型转换 251
7.2.7 集合操作 251
7.2.8 综合运用 252
7.3 unordered 253
7.3.1 散列集合简介 254
7.3.2 散列集合的用法 255
7.3.3 散列映射简介 256
7.3.4 散列映射的用法 256
7.3.5 性能比较 257
7.3.6 高级议题 259
7.4 bimap 261
7.4.1 类摘要 261
7.4.2 基本用法 262
7.4.3 值的集合类型 263
7.4.4 集合类型的用法 264
7.4.5 使用标签类型 266
7.4.6 使用assign库 267
7.4.7 查找与替换 268
7.4.8 投射 269
7.4.9 高级议题 270
7.5 circular_buffer 271
7.5.1 类摘要 271
7.5.2 用法 272
7.5.3 环型缓冲区 273
7.5.4 空间优化型缓冲区 275
7.6 tuple 275
7.6.1 最简单的tuple:pair 276
7.6.2 类摘要 276
7.6.3 创建与赋值 277
7.6.4 访问元素 278
7.6.5 比较操作 279
7.6.6 输入输出 280
7.6.7 连结变量 281
7.6.8 应用于assign库 282
7.6.9 应用于exception库 282
7.6.10 内部结构 282
7.6.11 使用访问者模式 284
7.6.12 高级议题 285
7.7 any 287
7.7.1 类摘要 287
7.7.2 访问元素 288
7.7.3 用法 289
7.7.4 简化的操作函数 290
7.7.5 保存指针 291
7.7.6 输出 292
7.7.7 应用于容器 294
7.8 variant 294
7.8.1 类摘要 294
7.8.2 访问元素 295
7.8.3 用法 296
7.8.4 访问器 297
7.8.5 与any的区别 300
7.8.6 高级议题 300
7.9 multi_array 302
7.9.1 类摘要 302
7.9.2 用法 304
7.9.3 多维数组生成器 306
7.9.4 改变形状和大小 307
7.9.5 创建子视图 308
7.9.6 适配普通数组 310
7.9.7 高级议题 311
7.10 property_tree 314
7.10.1 类摘要 315
7.10.2 读取配置信息 316
7.10.3 写入配置信息 318
7.10.4 更多用法 319
7.10.5 XML数据格式 320
7.10.6 其他数据格式 321
7.10.7 高级议题 323
7.11 总结 324
第8章 算法 327
8.1 foreach 327
8.1.1 用法 328
8.1.2 详细解说 329
8.1.3 使用typeof 329
8.1.4 更优雅的名字 330
8.1.5 支持的序列类型 331
8.1.6 一个小问题 332
8.2 minmax 332
8.2.1 用法 333
8.2.2 使用tuples::tie 334
8.3 minmax_element 334
8.3.1 用法 334
8.3.2 其他函数的用法 335
8.4 总结 336
第9章 数学与数字 337
第10章 操作系统相关 371
第11章 函数与回调 419
第12章 并发编程 467
第13章 编程语言支持 513
第14章 其他Boost组件 537
第15章 Boost与设计模式 547
第16章 结束语 559
附录A 推荐书目 565
附录B 网络资源 567
附录C C++标准简述 569
附录D STL简述 571
附录E ref_array实现代码 573
深入C++“准”标准库
光盘服务联系方式: 020-38250260 客服QQ:4006604884
云图客服:
用户发送的提问,这种方式就需要有位在线客服来回答用户的问题,这种 就属于对话式的,问题是这种提问是否需要用户登录才能提问
Video Player
×
Audio Player
×
pdf Player
×