Boost常用组件概览

前言

    大致翻阅了罗剑锋老师所著的《Boost程序库完全开发指南》(第三版),对书中介绍的一些常用的Boost库组件进行一个总结性的概览,这些总结基本来自书中的介绍,其中一些也添加了自己的描述。写这篇博文的主要意图是:(1)进行读书笔记,便于日后浏览;(2)与大家共享,也相当于做了一个知识提炼,把一些常用组件的用途进行总结说明,旨在让大家能快速了解这些常用组件的用途,日后若有需要用到的地方,可以深入学习并应用。

    总之,这篇博文并不是网上那些专业的Boost库源码分析,也不是对整个Boost库的专业剖析,只是作为一个Boost库在C++应用方面的读书笔记与大家分享,旨在帮助大家了解一些常用的组件,避免重复的造轮子。书中有一句话说的很好:在程序开发中,千万要“避免重复造轮子”(这样下来只会浪费时间,也就是吃力不讨好),所以,如果在开发中遇到了什么问题,首先查阅STL、Boost库,如果不能解决,再上网查,实在没有可以参考的已有方案再自己动手。


Boost常用库概览

    1、时间与日期
        C++一直以来缺乏对时间和日期的处理能力,而时间和日期又是现实生活中经常遇到的,所以C++程序员不得不求助于C,使用笨拙的结构和函数。无法忍受这一情形的程序员则手工构造了自己的首先以满足开发所需,这就导致了很多程序员在“重复的造轮子”Boost提供了timer、data_time、chrono三个库解决了上述问题,避免程序员重复造轮子。

            (1)timer库提供简易的度量时间和进度显示功能,可以用于性能测试等需要计时的任务,对于大多数的情况他足够用。
            (2)data_time库提供全面且灵活的日期时间库,目的就是简化复杂的日期和时间处理工作。
            (3)chrono库提供“计算机世界”的时间处理服务,实现计算机系统的精确计时。


    2、内存管理
        C++标准没有像Java、C#等语言的垃圾回收机制,这就需要C++程序员自己去避免内存泄漏、悬挂指针、越界访问等内存问题。Boost提供了诸多库来保证C++高效、正确的内存管理工作,这些库包括:smart_ptr、scoped_ptr、scoped_array、shared_ptr、shared_ptr、shared_array、weak_ptr、intrusive_ptr、pool、object_pool、singleton_ptr、pool_alloc


    3、实用工具库
        这不是一个整体库,只是把Boost中的一些比较小的、简单的库归为一个“工具库”,这些小工具库不全是类,也有宏,列举为:
            (1)noncopyable组件:实现一个禁止拷贝的类;
            (2)ignore_unused组件:保证程序中暂时不用但又必须保留的变量通过编译(不发出警告,注意,千万不要忽略程序编译过程中编译器抛出的警告,要做到零警告零错误);

            (3)optional组件:包装“可能产生无效值”的对象,保证这些对象返回一个有效值或者default值;

            (4)assign组件:提供简单、方便的标准库容器赋值或初始化服务,避免为了赋值或初始化一个容器而重复调用insert、push_back方法;
            (5)swap组件:优化后的swap函数;
            (6)singleton组件:单例模式,实现这种模式的类在程序生命周期内只能有且仅有一个实例;
            (7)tribool组件:三态bool类型,包括true、false、indeterminate(未知,不确定)三种状态;
            (8)operators组件:运行用户在自己的类里面仅定义少量的操作符,就可以方便地自动生成其他操作符重载,而且保证正确的语义实现,如一个类只需要定义==和<操作符,就可以自动生成!=、>、<=、>=这四种操作符;
            (9)exception组件:Boost定义的异常类,是对C++标准中的std::exception异常类的改进与强化;

            (10)uuid组件:表示和生成UUID(通用唯一识别码)

            (11)config组件:Boost开发者(而不是库使用者,即我们)工具,所以不用管;

            (12)utility库:这不是一个有统一主题的Boost库,包含若干很小但很有用的组件工具;



    4、字符串与文本处理
        包括lexical_cast、format、string_ref、string_algo、tokenizer和xpressive6个库,其中:

            (1)lexical_cast和format主要关注于字符串的表示,可以将数值转化为字符串,对输出做精确的格式化。
            (2)string_ref提供了一个只读视图,可以避免字符串的拷贝代价,是更好的const std::string&的替代品。
            (3)string_algo、tokenizer和xpressive三个库主要关注于字符串的处理,提供了大量的字符串处理函数。

    5、正确性与测试

        这一类库主要是为了增强C++程序的bug检测,主要包括assert、static_assert、lightweight_test和test4个库。
            (1)assert库:提供运行时的断言,对C++标准中的assert进了强化;
            (2)static_assert库:提供编译期诊断;
            (3)lightweight_test和test库:提供单元测试功能

    6、容器与数据结构
        Boost容器库是对C++标准容器库的扩展,主要包括10个容器(数据结构):array、dynamic_bitset、unordered、bimap、circular_buffer、tuple、any、variant、multi_array、property_tree。
            (1)array库:对C++内建数组的封装,是C++11标准的一部分
            (2)dynamic_bitset库:结合了vector<bool>和bitset二者的有点,既能动态增长,又方便进行位运算;
            (3)unordered库:散列容器类(读者可以自行百度)
            (4)bimap库:类似与C++标准库的关联容器,但是标准关联容器只是单向关联(映射),而bimap提供双向映射的能力;
            (5)circular_buffer库:大小固定的循环缓冲区;
            (6)tuple库:元祖,对比与C++标准库的pair类型,tuple可以容纳不同数目元素,而且每个元素的类型都可以不一样;
            (7)any库:只能容纳一个元素的容器,即该容器size固定为1,但是这个元素的类型可以任意;
            (8)variant库:对C++中union数据结构的扩展和增强,union只能容纳内置类型的数据,而variant没有这个限制;
            (9)multi_array库:多维数组(容器),类似vector<vector<int> >;
            (10)property_tree库:保存了多个属性值的树形数据结构;

    7、算法
        C++标准库(STL)中提供了大量的算法,可以对容器执行统计、查找、赋值、排序等操作,同时Boost也跟进标准库,提供了一些其他算法的实现,这里主要介绍三个算法组件:foreach、minmax、algorithm。
            (1)foreach组件:对循环程序结构(如for循环)的编译器级别实现,不依赖与高级别编译器,即再低级别编译器上也能编译运行;
            (2)minmax组件:最大值、最小值应用;
            (3)algorithm组件:是一个算法集合,包含了很多有用的、小的算法。

    8、数学与数字
        C++标准库现有的用于科学计算的组件还是无法满足现代科学的计算要求,Boost库就对这一方面的库进行补充,主要包括:math.constants、integer、rational、ratio、crc和random6个库。
            (1)math.constants库:主要包含一些数学常数,如根号2、π等;
            (2)integer库:提供哟管整数处理的头文件和类,具有良好的可移植性;
            (3)rational库:实现了有理数
            (4)ratio库:表述生活中的一些常用的单位表示;
            (5)crc库:就是计算机网络中的循环冗余校验码,是一种错误检测机制;
             (6)random库:真正的随机数生成器。

    9、操作系统相关
        Boost提供了一定的跨平台移植功能,这些库屏蔽了操作系统的底层细节,主要包括:system、chrono、cpu_timer、filesystem、program_options库;
            (1)system库:使用轻量级的对象封装了操作系统底层的错误代码和错误信息,使调用操作系统功能的程序可以被很容易地移植到其他系统。
            (2)cpu_timer库:支持对CPU时间片进行高进度的计时;
            (3)filesystem库:是一个可移植的文件系统操作库;

            (4)program_options库:提供类似于gcc那样功能强大的命令行参数处理功能;

    10、函数与回调
        主要涉及函数与函数对象,总共4个库:ref、bind、function、signals2
            (1)ref库:提供引用语义;
            (2)bind库:提供参数绑定功能
            (3)function库:函数对象”容器“
            (4)signals2库:基于Boost库中的另一个库signals实现了线程安全的观察者模式;

    11、并发编程
        Boost提供多个用于并发编程的库或组件来弥补C++标准库在一块的短板,主要包括3个库:atomic、thread、asio。
            (1)atomic库:实现了C++11标准库定义的院子操作库,对不同计算机硬件的底层操作原语进行封装,提供跨平台的原子操作功能;
            (2)thread库:已经成为C++11的标准,为C++增加了线程处理的能力,它提供简明清晰的互斥量、线程、条件变量等概念,可以很容易地创建多线程应用程序,实现并发编程。
            (3)asio库:主要用于网络编程,封装了大量的Socket API,提供了一个现代C++风格的网络编程接口

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值