Boost程序库完全开发指南
2010-9
电子工业出版社
罗剑锋
578
无
Boost是一个功能强大、构造精巧、跨平台、开源并且完全免费的C++程序库,有着“C++‘准’标准库”的美誉。1996年我上大学最开始学的是Pascal,不得不说,Pascal的严谨程序风格确实很适合作为一门教学语言,然而用于实际开发就不那么合适了(直到出现Delphi)。由于当时学校并未开设C语言课程,因此在Pascal课程结束后我就买书自学C/C++语言,并在次年报名国家计算机水平考试,靠着一点点编程和考试的“天分”获得了高级程序员资质(当年很热衷考级考证,后来就“淡定”多了)。虽然有了资格证,但我仍然算是个C++的初学者,对于C++的认识还处于C的面向过程和简单的基于对象层次上。新千年伊始我考入了北京理工大学就读研究生,因为跟导师做项目开始接触STL与C++标准库,大概是2005年从1.33版结识了Boost,这才真正领略了C++的精髓。那段时期Java和C#正在国内大行其道,C++则势单力薄,有关STL和C++标准的技术书籍寥寥无几,而讲解Boost的书更是为零,故对Boost的学习基本只能靠自己的摸索与实践。好在Boost自带的文档相当丰富(虽然看全英文的资料十分辛苦),而且源码也写得比较清晰规范,在熟悉了STL的基础上学习Boost倒也并不算太难。但Boost的一个最大的特点就是“庞大”,功能组件众多,要想把它全部装进脑子里融会贯通基本上是不可能的,使用时需要经常查阅英文文档,相当的麻烦。因此,在学习的过程中,我逐渐产生了编写学习笔记的想法。一开始只是一个简单的纯文本文件,记录了一些使用经验的片断,随着积累的不断增加,纯文本形式已经不能够满足知识整理的需求了,于是我又把这些文字迁移到了Word文档里,把使用经验分类编目,加以较系统地归纳梳理。慢慢地,这份学习笔记居然有了上万字的规模,成为了一份很好的Boost备忘参考,在日常的开发工作中给了我很大的帮助——就像《设计模式》一书中所说的那样,捕获了很多使用Boost解决问题的实践经验,避免了重复发现。不过,这份资料一直是仅限于我个人使用,属于“自娱自乐”的作品,从未示人。时间一晃到了2010年1月份的某天夜里,不知道是什么原因我忽然失眠了,躺在床上翻来覆去怎么也睡不着。突然,一个念头闯入了脑海:把Boost开发经验整理出版吧,让更多人能够分享这些知识,正所谓“独乐乐,与众乐乐,孰乐?”。这个大胆的想法的出现让我那天的失眠又延长了几个小时——关于书的各种构想在头脑中“肆虐横行”。随后的几天里我就把这个想法付诸行动了,虽然以前也写过并发表很多文章,也在网上印刷了几本个人文集,但出版正式的书还是第一次。在把学习笔记进一步整理完善,编写出较完整的结构和一个样章后,我就开始联系出版社了。当初并没有多大的信心,毕竟我这个作者名不见经传,也没有什么资历、背景和名气(而且还是个“网盲”,从未跟随潮流开个人博客)。很幸运,发出的第一个E-mail就是电子工业出版社,而且编辑也在第一时间回复了我,这才给了我以持续写作完成全书的动力。
Boost是一个功能强大、构造精巧、跨平台、开源并且完全免费的C++程序库,有着“C++‘准’标准库”的美誉。 它由C++标准委员会部分成员所设立的Boost社区开发并维护,使用了许多现代C++编程技术,内容涵盖字符串处理、正则表达式、容器与数据结构、并发编程、函数式编程、泛型编程、设计模式实现等许多领域,极大地丰富了C++的功能和表现力,能够使C++软件开发更加简洁、优雅、灵活和高效。 《Boost程序库完全开发指南:深入C++"准"标准库》基于Boost1.42版,介绍了其中的所有99个库,并且详细深入地讲解了其中数十个库,同时实现了若干颇具实用价值的工具类和函数,可帮助读者迅速理解掌握Boost的用法以及在实际应用开发工作中。 《Boost程序库完全开发指南:深入C++"准"标准库》内容丰富、结构严谨、详略得当、讲解透彻,带领读者领略了C++的最新前沿技术,相信会是每位C++程序员的必备工具书。
罗剑锋(网名Chrono),1996年就读于东北财经大学,1997年开始接触C/C++。1998年参加全国计算机等级考试,获高级程序员资质。2003年毕业于北京理工大学,获计算机专业硕士学位。目前供职于某部委下属软件公司,任项目经理,主要研究方向为C/C++、设计模式、密码学、数据库、嵌入式系统开发。业余爱好是阅读、欣赏音乐和旅游。
第0章 导读 10.1 关于本书 10.2 读者对象 10.3 本书的术语与风格 20.4 本书的结构 30.5 如何阅读本书 5第1章 Boost程序库总论 71.1 关于Boost 71.1.1 什么是Boost 71.1.2 安装Boost 81.1.3 使用Boost 81.2 关于STLport 91.2.1 什么是STLport 91.2.2 安装STLport 101.2.3 使用STLport 101.3 开发环境 101.3.1 STLport的编译方法 111.3.2 Boost的编译方法 111.3.3 VisualStudio 2005环境设置 15第2章 时间与日期 172.1 timer库概述 172.2 timer 172.2.1 用法 182.2.2 类摘要 182.2.3 使用建议 192.3 progress_timer 202.3.1 用法 202.3.2 类摘要 212.3.3 扩展计时精度 212.4 progress_display 232.4.1 类摘要 242.4.2 用法 252.4.3 注意事项 262.5 date_time库概述 272.5.1 编译date_time库 272.5.2 date_time库的基本概念 282.6 处理日期 292.6.1 日期 292.6.2 创建日期对象 302.6.3 访问日期 312.6.4 日期的输出 322.6.5 与tm结构的转换 332.6.6 日期长度 342.6.7 日期运算 352.6.8 日期区间 362.6.9 日期区间运算 382.6.10 日期迭代器 392.6.11 其他功能 402.6.12 综合运用 402.7 处理时间 432.7.1 时间长度 432.7.2 操作时间长度 452.7.3 时间长度的精确度 462.7.4 时间点 482.7.5 创建时间点对象 482.7.6 操作时间点对象 492.7.7 与tm、time_t等结构的转换 502.7.8 时间区间 512.7.9 时间迭代器 512.7.10 综合运用 522.8 date_time库的高级议题 542.8.1 编译配置宏 552.8.2 格式化时间 552.8.3 本地时间 562.8.4 序列化 582.9 总结 58第3章 内存管理 613.1 smart_ptr库概述 613.1.1 RAII机制 613.1.2 智能指针 623.2 scoped_ptr 633.2.1 类摘要 633.2.2 操作函数 643.2.3 用法 653.2.4 与auto_ptr的区别 663.3 scoped_array 673.3.1 类摘要 673.3.2 用法 683.3.3 使用建议 693.4 shared_ptr 693.4.1 类摘要 703.4.2 操作函数 703.4.3 用法 723.4.4 工厂函数 743.4.5 应用于标准容器 753.4.6 应用于桥接模式 763.4.7 应用于工厂模式 773.4.8 定制删除器 783.4.9 高级议题 803.5 shared_array 813.5.1 类摘要 813.5.2 用法 823.6 weak_ptr 823.6.1 类摘要 823.6.2 用法 833.6.3 获得this的shared_ptr 843.7 intrusive_ptr 853.8 pool库概述 853.9 pool 853.9.1 类摘要 863.9.2 操作函数 863.9.3 用法 873.10 object_pool 883.10.1 类摘要 883.10.2 操作函数 883.10.3 用法 893.10.4 使用更多的构造参数 903.11 singleton_pool 913.11.1 类摘要 913.11.2 用法 923.12 pool_alloc 933.13 总结 93第4章 实用工具 954.1 noncopyable 954.1.1 原理 964.1.2 用法 964.2 typeof 974.2.1 动机 974.2.2 用法 994.2.3 向typeof库注册自定义类 1004.2.4 高级议题 1014.3 optional 1014.3.1 “无意义”的值 1014.3.2 类摘要 1024.3.3 操作函数 1024.3.4 用法 1034.3.5 工厂函数 1044.3.6 高级议题 1054.4 assign 1064.4.1 使用操作符+=向容器增加元素 1064.4.2 使用操作符()向容器增加元素 1074.4.3 初始化容器元素 1084.4.4 减少重复输入 1104.4.5 与非标准容器工作 1114.4.6 高级用法 1124.5 swap 1134.5.1 原理 1134.5.2 交换数组 1144.5.3 特化std::swap 1144.5.4 特化ADL可找到的swap 1154.5.5 使用建议 1164.6 singleton 1164.6.1 boost.pool的单件实现 1174.6.2 boost.serialzation的单件实现 1194.7 tribool 1204.7.1 类摘要 1214.7.2 用法 1224.7.3 为第三态更名 1224.7.4 输入输出 1234.7.5 与optional的区别 1244.8 operators 1254.8.1 基本运算概念 1264.8.2 算术操作符的用法 1274.8.3 基类链 1294.8.4 复合运算概念 1304.8.5 相等与等价 1314.8.6 解引用操作符 1334.8.7 下标操作符 1344.8.8 高级议题 1354.9 exception 1364.9.1 标准库中的异常 1374.9.2 类摘要 1374.9.3 向异常传递信息 1394.9.4 更进一步的用法 1404.9.5 包装标准异常 1424.9.6 使用函数抛出异常 1434.9.7 获得更多的调试信息 1444.9.8 高级议题 1454.10 uuid 1464.10.1 类摘要 1474.10.2 用法 1484.10.3 生成器 1504.10.4 增强的uuid类 1524.10.5 与字符串的转换 1534.10.6 SHA1摘要算法 1544.11 config 1554.11.1 BOOST_STRINGIZE 1554.11.2 BOOST_STATIC_CONSTANT 1554.11.3 禁止编译器警告 1564.11.4 其他工具 1574.12 utility 1574.12.1 BOOST_BINARY 1574.12.2 BOOST_CURRENT_FUNCTION 1584.13 总结 160第5章 字符串与文本处理 1635.1 lexical_cast 1635.1.1 用法 1645.1.2 异常bad_lexical_cast 1655.1.3 对转换对象的要求 1665.1.4 应用于自己的类 1665.2 format 1675.2.1 简单的例子 1685.2.2 输入操作符% 1695.2.3 类摘要 1715.2.4 格式化语法 1725.2.5 format的性能 1735.2.6 高级用法 1735.3 string_algo 1755.3.1 简单的例子 1755.3.2 string_algo概述 1765.3.3 大小写转换 1775.3.4 判断式(算法) 1785.3.5 判断式(函数对象) 1795.3.6 分类 1805.3.7 修剪 1815.3.8 查找 1825.3.9 替换与删除 1845.3.10 分割 1865.3.11 合并 1875.3.12 查找(分割)迭代器 1885.4 tokenizer 1895.4.1 类摘要 1905.4.2 用法 1905.4.3 分词函数对象 1915.4.4 char_separator 1925.4.5 escaped_list_separator 1935.4.6 offset_separator 1935.4.7 tokenizer库的缺陷 1955.5 xpressive 1965.5.1 两种使用方式 1975.5.2 正则表达式语法简介 1975.5.3 类摘要 1995.5.4 匹配 2015.5.5 查找 2035.5.6 替换 2045.5.7 迭代 2065.5.8 分词 2075.5.9 与regex的区别 2085.5.10 高级议题 2095.6 总结 211第6章 正确性与测试 2136.1 assert 2136.1.1 基本用法 2136.1.2 禁用断言 2146.1.3 扩展用法 2156.1.4 BOOST_VERIFY 2166.2 static_assert 2176.2.1 用法 2176.2.2 使用建议 2186.3 test 2196.3.1 编译test库 2196.3.2 最小化的测试套件 2206.3.3 单元测试框架简介 2216.3.4 测试断言 2226.3.5 测试用例与套件 2236.3.6 测试实例 2246.3.7 测试夹具 2266.3.8 测试日志 2286.3.9 运行参数 2296.3.10 函数执行监视器 2306.3.11 程序执行监视器 2336.3.12 高级议题 2346.4 总结 236第7章 容器与数据结构 2397.1 array 2397.1.1 类摘要 2407.1.2 操作函数 2407.1.3 用法 2417.1.4 能力限制 2427.1.5 array的初始化 2427.1.6 实现ref_array 2437.1.7 ref_array的用法 2447.2 dynamic_bitset 2457.2.1 类摘要 2457.2.2 创建与赋值 2477.2.3 容器操作 2487.2.4 位运算与比较运算 2497.2.5 访问元素 2497.2.6 类型转换 2517.2.7 集合操作 2517.2.8 综合运用 2527.3 unordered 2537.3.1 散列集合简介 2547.3.2 散列集合的用法 2557.3.3 散列映射简介 2567.3.4 散列映射的用法 2567.3.5 性能比较 2577.3.6 高级议题 2597.4 bimap 2617.4.1 类摘要 2617.4.2 基本用法 2627.4.3 值的集合类型 2637.4.4 集合类型的用法 2647.4.5 使用标签类型 2667.4.6 使用assign库 2677.4.7 查找与替换 2687.4.8 投射 2697.4.9 高级议题 2707.5 circular_buffer 2717.5.1 类摘要 2717.5.2 用法 2727.5.3 环型缓冲区 2737.5.4 空间优化型缓冲区 2757.6 tuple 2757.6.1 最简单的tuple:pair 2767.6.2 类摘要 2767.6.3 创建与赋值 2777.6.4 访问元素 2787.6.5 比较操作 2797.6.6 输入输出 2807.6.7 连结变量 2817.6.8 应用于assign库 2827.6.9 应用于exception库 2827.6.10 内部结构 2827.6.11 使用访问者模式 2847.6.12 高级议题 2857.7 any 2877.7.1 类摘要 2877.7.2 访问元素 2887.7.3 用法 2897.7.4 简化的操作函数 2907.7.5 保存指针 2917.7.6 输出 2927.7.7 应用于容器 2947.8 variant 2947.8.1 类摘要 2947.8.2 访问元素 2957.8.3 用法 2967.8.4 访问器 2977.8.5 与any的区别 3007.8.6 高级议题 3007.9 multi_array 3027.9.1 类摘要 3027.9.2 用法 3047.9.3 多维数组生成器 3067.9.4 改变形状和大小 3077.9.5 创建子视图 3087.9.6 适配普通数组 3107.9.7 高级议题 3117.10 property_tree 3147.10.1 类摘要 3157.10.2 读取配置信息 3167.10.3 写入配置信息 3187.10.4 更多用法 3197.10.5 XML数据格式 3207.10.6 其他数据格式 3217.10.7 高级议题 3237.11 总结 324第8章 算法 3278.1 foreach 3278.1.1 用法 3288.1.2 详细解说 3298.1.3 使用typeof 3298.1.4 更优雅的名字 3308.1.5 支持的序列类型 3318.1.6 一个小问题 3328.2 minmax 3328.2.1 用法 3338.2.2 使用tuples::tie 3348.3 minmax_element 3348.3.1 用法 3348.3.2 其他函数的用法 3358.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
插图:
《Boost程序库完全开发指南:深入C++"准"标准库》:Boost是一个功能强大、构造精巧、跨平台、开源并且完全免费的C++程序库,有着“C++‘准’标准库”的美誉,是每位C++程序员的必备工具。《Boost程序库完全开发指南:深入C++"准"标准库》基于Boost1.42版,介绍了其中所有的99个库,并且详细深入地讲解了其中数十个库,同时实现了若干颇具实用价值的工具类和函数,可帮助读者迅速地理解掌握Boost的用法并用于实际的开发工作中。
无
深入的不够,还是稍浅了一些,适合初学者看
质量不错,内容很详细,就是编译boost库的时候,可能是写书时间的原因,我照书上的方法编译不了boost,后来在网上找到方法。
标准工具书,无所谓好坏。错别字不多倒是真的。
值得学习和一试,对我们编程有绝对的好处。
不错了,对于新手来说有本这样的中文书讲boost的真的很不错.
Boost的书比较难找,这本国内的还是写得挺详尽的,看看人家国外Introduction to the Boost C++ Libraries,还分上下卷,就是不知道内容怎么样。
个人喜欢在amazon买东西
接触BOOST时间不长,一直是在网上查找相关资料,这下买一本,用的时候查的方便了。
要说抄袭,那绝对不是这本书的特征。毕竟boost的书很少,国外也不多,在C++领域这算是非常新的技术了。总的来说很满意,读过几十页电子版才买的。此书带有些大师风范,作者对boost理解非常深入,写此书也能看出来下了很大功夫。表述中肯,没有无谓的评价。风格上属于文集类型,所以看起来内容有点散,不过还好。作者特别注重“离开电脑阅读”,这一点非常推崇。装订质量还行,... 阅读更多
喜欢亚马逊的服务,支持除了在亚马逊上买不到的书,我都会一直在亚马逊上购买服务好,送货快,质量也不错当然对于这本书,其实一般般拉,没讲到多少精髓的东西。当然适合我们接触boost的人阅读
晚上12点多下的单,没想到现在就已经拿到了,这次卓越效率比以前高了许多啊。估计货应该是在西安库房放着的。说点有用的:书还没有细看,具体写的好不好还不敢乱说。但是我需要向大家说明,这本书是侧重于应用的,并没有像许多讨论STL的书那样讲解实现,应该说是完全没有(至少我没有看见)。... 阅读更多
Boost是C++中很强大的一个库,但是有时候在写代码时候比较困惑不知如何利用这样强大的功能,目前我正在读这本书,觉得是一本很好的工具书。希望更多的C++爱好者能够像我一样从中吸收到自己想要的知识!——转自网上书评
经典不必多说哦
C++ Boost
书还行,价格高些
很好的入门指引
经典boost书
好书必顶