新書推薦:
《
千万别喝南瓜汤(遵守规则绘本)
》
售價:HK$
44.7
《
大模型启示录
》
售價:HK$
112.0
《
东法西渐:19世纪前西方对中国法的记述与评价
》
售價:HK$
201.6
《
养育男孩:官方升级版
》
售價:HK$
50.4
《
小原流花道技法教程
》
售價:HK$
109.8
《
少女映像室 唯美人像摄影从入门到实战
》
售價:HK$
110.9
《
詹姆斯·伍德系列:不负责任的自我:论笑与小说(“美国图书评论奖”入围作品 当代重要文学批评家詹姆斯·伍德对“文学中的笑与喜剧”的精湛研究)
》
售價:HK$
87.4
《
武当内家散手
》
售價:HK$
50.4
內容簡介:
Boost是一个功能强大、构造精巧、跨平台、开源并且完全免费的C++程序库,有着“C++‘准’标准库”的美誉。
Boost由C++标准委员会部分成员所设立的Boost社区开发并维护,使用了许多现代C++编程技术,内容涵盖字符串处理、正则表达式、容器与数据结构、并发编程、函数式编程、泛型编程、设计模式实现等许多领域,极大地丰富了C++的功能和表现力,能够使C++软件开发更加简捷、优雅、灵活和高效。
本书基于2012年8月发布的Boost1.51版,介绍了其中的所有117个库,并且结合C++11标准详细、深入地讲解了其中数十个库,同时实现了若干颇具实用价值的工具类和函数,可帮助读者迅速地理解、掌握Boost的用法及其在实际开发工作中的应用。
本书内容丰富、结构严谨、详略得当、讲解透彻,带领读者领略了C++的最新前沿技术,相信会是每位C++程序员的必备工具书。
關於作者:
罗剑锋,1996年就读于东北财经大学,1997年开始接触C/C++,1998年参加计算机软件专业技术资格和水平考试,获高级程序员资质,2003年毕业于北京理工大学,获计算机专业硕士学位,目前任项目经理,主要研究方向为C/C++、设计模式、密码学、数据库、嵌入式系统开发,业余爱好是阅读、欣赏音乐和旅游。
目錄 :
第0章 导读
0.1 关于本书
0.2 读者对象
0.3 本书的术语与风格
0.4 本书的结构
0.5 如何阅读本书
第1章 Boost程序库总论
1.1 关于Boost
1.1.1 什么是Boost
1.1.2 安装Boost
1.1.3 使用Boost
1.2 关于STLport
1.2.1 什么是STLport
1.2.2 安装STLport
1.2.3 编译STLport
1.2.4 使用STLport
1.3 开发环境简介
1.4 开发环境搭建
1.4.1 UNIX开发环境
1.4.2 Windows开发环境
1.4.3 高级议题
1.5 总结
第2章 时间与日期
2.1 timer库概述
2.2 timer
2.2.1 用法
2.2.2 类摘要
2.2.3 使用建议
2.3 progress_timer
2.3.1 用法
2.3.2 类摘要
2.3.3 扩展计时精度
2.4 progress_display
2.4.1 类摘要
2.4.2 用法
2.4.3 注意事项
2.5 date_time库概述
2.5.1 编译date_time库
2.5.2 date_time库的基本概念
2.6 处理日期
2.6.1 日期
2.6.2 创建日期对象
2.6.3 访问日期
2.6.4 日期的输出
2.6.5 与tm结构的转换
2.6.6 日期长度
2.6.7 日期运算
2.6.8 日期区间
2.6.9 日期区间运算
2.6.10 日期迭代器
2.6.11 其他功能
2.6.12 综合运用
2.7 处理时间
2.7.1 时间长度
2.7.2 操作时间长度
2.7.3 时间长度的精确度
2.7.4 时间点
2.7.5 创建时间点对象
2.7.6 操作时间点对象
2.7.7 与tm、time_t等结构的转换
2.7.8 时间区间
2.7.9 时间迭代器
2.7.10 综合运用
2.8 date_time库的高级议题
2.8.1 编译配置宏
2.8.2 格式化时间
2.8.3 本地时间
2.8.4 序列化
2.9 总结
第3章 内存管理
3.1 smart_ptr库概述
3.1.1 RAII机制
3.1.2 智能指针
3.2 scoped_ptr
3.2.1 类摘要
3.2.2 操作函数
3.2.3 用法
3.2.4 与auto_ptr的区别
3.2.5 与unique_ptr的区别
3.3 scoped_array
3.3.1 类摘要
3.3.2 用法
3.3.3 与unique_ptr的区别
3.3.4 使用建议
3.4 shared_ptr
3.4.1 类摘要
3.4.2 操作函数
3.4.3 用法
3.4.4 工厂函数
3.4.5 应用于标准容器
3.4.6 应用于桥接模式
3.4.7 应用于工厂模式
3.4.8 定制删除器
3.4.9 高级议题
3.5 shared_array
3.5.1 类摘要
3.5.2 用法
3.6 weak_ptr
3.6.1 类摘要
3.6.2 用法
3.6.3 获得this的shared_ptr
3.6.4 打破循环引用
3.7 intrusive_ptr
3.8 pool库概述
3.9 pool
3.9.1 类摘要
3.9.2 操作函数
3.9.3 用法
3.10 object_pool
3.10.1 类摘要
3.10.2 操作函数
3.10.3 用法
3.10.4 使用更多的构造参数
3.11 singleton_pool
3.11.1 类摘要
3.11.2 用法
3.12 pool_alloc
3.13 总结
第4章 实用工具
4.1 noncopyable
4.1.1 原理
4.1.2 用法
4.1.3 原理
4.2 typeof
4.2.1 动机
4.2.2 用法
4.2.3 向typeof库注册自定义类
4.2.4 使用建议
4.3 optional
4.3.1 “无意义”的值
4.3.2 类摘要
4.3.3 操作函数
4.3.4 用法
4.3.5 工厂函数
4.3.6 高级议题
4.4 assign
4.4.1 使用操作符+=向容器增加元素
4.4.2 使用操作符向容器增加元素
4.4.3 初始化容器元素
4.4.4 减少重复输入
4.4.5 搭配非标准容器工作
4.4.6 高级用法
4.5 swap
4.5.1 原理
4.5.2 交换数组
4.5.3 特化std::swap
4.5.4 特化ADL可找到的swap
4.5.5 使用建议
4.6 singleton
4.6.1 boost.pool的单件实现
4.6.2 boost.serialzation的单件实现
4.7 tribool
4.7.1 类摘要
4.7.2 用法
4.7.3 为第三态更名
4.7.4 输入输出
4.7.5 与optional的区别
4.8 operators
4.8.1 基本运算概念
4.8.2 算术操作符的用法
4.8.3 基类链
4.8.4 复合运算概念
4.8.5 相等与等价
4.8.6 解引用操作符
4.8.7 下标操作符
4.8.8 高级议题
4.9 exception
4.9.1 标准库中的异常
4.9.2 类摘要
4.9.3 向异常传递信息
4.9.4 更进一步的用法
4.9.5 包装标准异常
4.9.6 使用函数抛出异常
4.9.7 获得更多的调试信息
4.9.8 高级议题
4.10 uuid
4.10.1 类摘要
4.10.2 用法
4.10.3 生成器
4.10.4 增强的uuid类
4.10.5 与字符串的转换
4.10.6 SHA1摘要算法
4.11 config
4.11.1 BOOST_STRINGIZE
4.11.2 BOOST_STATIC_CONSTANT
4.11.3 其他工具
4.12 utility
4.12.1 BOOST_BINARY
4.12.2 BOOST_CURRENT_FUNCTION
4.13 总结
第5章 字符串与文本处理
5.1 lexical_cast
5.1.1 用法
5.1.2 异常bad_lexical_cast
5.1.3 对转换对象的要求
5.1.4 应用于自己的类
5.2 format
5.2.1 简单的例子
5.2.2 输入操作符%
5.2.3 类摘要
5.2.4 格式化语法
5.2.5 format的性能
5.2.6 高级用法
5.3 string_algo
5.3.1 简单的例子
5.3.2 string_algo概述
5.3.3 大小写转换
5.3.4 判断式(算法)
5.3.5 判断式(函数对象)
5.3.6 分类
5.3.7 修剪
5.3.8 查找
5.3.9 替换与删除
5.3.10 分割
5.3.11 合并
5.3.12 查找(分割)迭代器
5.4 tokenizer
5.4.1 类摘要
5.4.2 用法
5.4.3 分词函数对象
5.4.4 char_separator
5.4.5 escaped_list_separator
5.4.6 offset_separator
5.4.7 tokenizer库的缺陷
5.5 xpressive
5.5.1 两种使用方式
5.5.2 正则表达式语法简介
5.5.3 类摘要
5.5.4 匹配
5.5.5 查找
5.5.6 替换
5.5.7 迭代
5.5.8 分词
5.5.9 与regex的区别
5.5.10 高级议题
5.6 总结
第6章 正确性与测试
6.1 assert
6.1.1 基本用法
6.1.2 禁用断言
6.1.3 扩展用法
6.1.4 BOOST_ASSERT_MSG
6.1.5 BOOST_VERIFY
6.2 static_assert
6.2.1 定义
6.2.2 用法
6.2.3 使用建议
6.3 test
6.3.1 编译test库
6.3.2 最小化的测试套件
6.3.3 单元测试框架简介
6.3.4 测试断言
6.3.5 测试用例与套件
6.3.6 测试实例
6.3.7 测试夹具
6.3.8 测试日志
6.3.9 运行参数
6.3.10 函数执行监视器
6.3.11 程序执行监视器
6.3.12 高级议题
6.4 总结
第7章 容器与数据结构
7.1 array
7.1.1 类摘要
7.1.2 操作函数
7.1.3 用法
7.1.4 能力限制
7.1.5 初始化
7.1.6 零长度的数组
7.1.7 与C++11标准的区别
7.1.8 实现ref_array
7.1.9 ref_array的用法
7.2 dynamic_bitset
7.2.1 类摘要
7.2.2 创建与赋值
7.2.3 容器操作
7.2.4 位运算与比较运算
7.2.5 访问元素
7.2.6 类型转换
7.2.7 集合操作
7.2.8 综合运用
7.3 unordered
7.3.1 散列集合简介
7.3.2 散列集合的用法
7.3.3 散列映射简介
7.3.4 散列映射的用法
7.3.5 高级议题
7.4 bimap
7.4.1 类摘要
7.4.2 基本用法
7.4.3 值的集合类型
7.4.4 集合类型的用法
7.4.5 使用标签类型
7.4.6 使用assign库
7.4.7 查找与替换
7.4.8 投射
7.4.9 高级议题
7.5 circular_buffer
7.5.1 类摘要
7.5.2 用法
7.5.3 环形缓冲区
7.5.4 空间优化型缓冲区
7.6 tuple
7.6.1 最简单的tuple:pair
7.6.2 类摘要
7.6.3 创建与赋值
7.6.4 访问元素
7.6.5 比较操作
7.6.6 输入输出
7.6.7 连结变量
7.6.8 应用于assign库
7.6.9 应用于exception库
7.6.10 内部结构
7.6.11 使用访问者模式
7.6.12 高级议题
7.7 any
7.7.1 类摘要
7.7.2 访问元素
7.7.3 用法
7.7.4 简化的操作函数
7.7.5 保存指针
7.7.6 输出
7.7.7 应用于容器
7.8 variant
7.8.1 类摘要
7.8.2 访问元素
7.8.3 用法
7.8.4 访问器
7.8.5 与any的区别
7.8.6 高级议题
7.9 multi_array
7.9.1 类摘要
7.9.2 用法
7.9.3 多维数组生成器
7.9.4 改变形状和大小
7.9.5 创建子视图
7.9.6 适配普通数组
7.9.7 高级议题
7.10 property_tree
7.10.1 类摘要
7.10.2 读取配置信息
7.10.3 写入配置信息
7.10.4 更多用法
7.10.5 XML数据格式
7.10.6 其他数据格式
7.10.7 高级议题
7.11 总结
第8章 算法
8.1 foreach
8.1.1 用法
8.1.2 详细解说
8.1.3 更优雅的名字
8.1.4 支持的序列类型
8.1.5 一个小问题
8.2 minmax
8.2.1 用法
8.2.2 使用tuples::tie
8.3 minmax_element
8.3.1 用法
8.3.2 其他函数的用法
8.4 总结
第9章 数学与数字
9.1 integer
9.1.1 integer_traits
9.1.2 标准整数类型
9.1.3 整数类型模板类
9.2 rational
9.2.1 类摘要
9.2.2 创建与赋值
9.2.3 算术运算与比较运算
9.2.4 类型转换
9.2.5 输入输出
9.2.6 分子与分母
9.2.7 与数学函数配合工作
9.2.8 异常
9.2.9 rational的精度
9.2.10 实现无限精度的整数类型
9.2.11 最大公约数和最小公倍数
9.3 crc
9.3.1 类摘要
9.3.2 预定义的实现类
9.3.3 计算CRC
9.3.4 CRC函数
9.3.5 自定义CRC函数
9.4 random
9.4.1 伪随机数发生器
9.4.2 伪随机数发生器的构造
9.4.3 伪随机数发生器的拷贝
9.4.4 随机数分布器
9.4.5 随机数分布器类摘要
9.4.6 随机数分布器用法
9.4.7 变量发生器
9.4.8 产生随机数据块
9.4.9 真随机数发生器
9.4.10 实现真随机数发生器
9.5 总结
第10章 操作系统相关
10.1 io_state_savers
10.1.1 类摘要
10.1.2 用法
10.1.3 简化new_progress_timer
10.2 system
10.2.1 编译system库
10.2.2 错误值枚举
10.2.3 错误类别
10.2.4 错误代码
10.2.5 错误异常
10.3 cpu_timer
10.3.1 编译cpu_timer库
10.3.2 时间类型
10.3.3 cpu_timer
10.3.4 auto_cpu_timer
10.3.5 定制输出格式
10.4 filesystem
10.4.1 编译filesystem库
10.4.2 类摘要
10.4.3 路径表示
10.4.4 可移植的文件名
10.4.5 路径处理
10.4.6 异常
10.4.7 文件状态
10.4.8 文件属性
10.4.9 文件操作
10.4.10 迭代目录
10.4.11 实例1:实现查找文件功能
10.4.12 实例2:实现模糊查找文件功能
10.4.13 实例3:实现拷贝目录功能
10.4.14 文件流操作
10.5 program_options
10.5.1 编译program_options库
10.5.2 概述
10.5.3 选项值
10.5.4 选项描述器
10.5.5 选项描述器的用法
10.5.6 分析器
10.5.7 存储器
10.5.8 使用位置选项值
10.5.9 分析环境变量
10.5.10 分组选项信息
10.5.11 高级用法
10.6 总结
第11章 函数与回调
11.1 result_of
11.1.1 原理
11.1.2 用法
11.2 ref
11.2.1 类摘要
11.2.2 基本用法
11.2.3 工厂函数
11.2.4 操作包装
11.2.5 综合应用
11.2.6 为ref增加函数调用功能
11.3 bind
11.3.1 工作原理
11.3.2 绑定普通函数
11.3.3 绑定成员函数
11.3.4 绑定成员变量
11.3.5 绑定函数对象
11.3.6 使用ref库
11.3.7 高级议题
11.4 function
11.4.1 类摘要
11.4.2 function的声明
11.4.3 操作函数
11.4.4 比较操作
11.4.5 用法
11.4.6 使用ref库
11.4.7 用于回调
11.4.8 与typeof的区别
11.5 signals2
11.5.1 类摘要
11.5.2 操作函数
11.5.3 插槽的连接与调用
11.5.4 信号的返回值
11.5.5 合并器
11.5.6 管理信号的连接
11.5.7 更灵活的管理信号连接
11.5.8 自动连接管理
11.5.9 应用于观察者模式
11.5.10 高级议题
11.6 总结
第12章 并发编程
12.1 thread
12.1.1 编译thread库
12.1.2 时间功能
12.1.3 互斥量
12.1.4 线程对象
12.1.5 创建线程
12.1.6 操作线程
12.1.7 中断线程
12.1.8 线程组
12.1.9 条件变量
12.1.10 共享互斥量
12.1.11 future
12.1.12 高级议题
12.2 asio
12.2.1 概述
12.2.2 定时器
12.2.3 定时器用法
12.2.4 网络通信简述
12.2.5 IP地址和端点
12.2.6 同步socket处理
12.2.7 异步socket处理
12.2.8 查询网络地址
12.2.9 高级议题
12.3 总结
第13章 编程语言支持
13.1 python库概述
13.1.1 Python语言简介
13.1.2 安装Python环境
13.1.3 编译python库
13.1.4 使用python库
13.2 嵌入Python
13.2.1 初始化解释器
13.2.2 封装Python对象
13.2.3 执行Python语句
13.2.4 异常处理
13.3 扩展Python
13.3.1 最简单的例子
13.3.2 导出函数
13.3.3 导出重载函数
13.3.4 导出类
13.3.5 导出类的更多细节
13.3.6 高级议题
13.4 总结
第14章 其他Boost组件
14.1 算法
14.2 字符串和文本处理
14.3 容器与数据结构
14.4 迭代器
14.5 函数对象与高级编程
14.6 泛型编程
14.7 模板元编程
14.8 预处理元编程
14.9 并发编程
14.10 数学与数字
14.11 TR1实现
14.12 输入输出
14.13 杂项
14.14 总结
第15章 Boost与设计模式
15.1 创建型模式
15.2 结构型模式
15.3 行为模式
15.4 其他模式
15.5 总结
第16章 结束语
16.1 未臻完美的Boost
16.2 让Boost工作得更好
16.3 工夫在诗外
附录A 推荐书目
附录B C++标准简述
附录C STL简述
內容試閱 :
时间的处理很复杂,因此在使用date_time库之前,我们需要明确一些基本概念。
如果把时间想象成一个向前和向后都无限延伸的实数轴,那么时间点就是数轴上的一个点,时间段就是两个时间点之间确定的一个区间,时长(时间长度)则是一个有正负号的标量,它是两个时间点之差,不属于数轴。
时间点、时间段和时长三者之间可以进行运算,例如时间点+时长=时间点,时长+时长=时长,时间段∩时间段=时间段、时间点∈时间段等等,但有的运算也是无意义的,如时间点+时间点、时长+时间段等等。这些运算都基于生活常识,很容易理解,但在编写时间处理程序时必须注意。
date_time库支持无限时间和无效时间(NADT,Not Available Date
Time)这样特殊的时间概念,类似于数学中极限的含义。时间点和时长都有无限的值,它们的运算规则比较特别,例如+∞时间点+时长=+∞时间点,时间点+∞时长=+∞时间点。如果正无限值与负无限值一起运算将有可能是无效时间,如+时长-∞NADT。
date_time库中用枚举special_values定义了这些特殊的时间概念,它位于名字空间boost::date_time,并被using语句引入其他子名字空间。
pos_infin : 表示正无限;
neg_infin : 表示负无限;
not_a_date_time : 无效时间;
min_date_time : 可表示的最小日期或时间;
max_date_time : 可表示的最大日期或时间。