Boost是为C++语言标准库提供扩展的一些C++程序库的总称。Boost库是一个可移植、提供源代码的C++库,为标准库的后备,是C++标准化进程的开发引擎之一,是为C++语言标准库提供扩展的一些C++程序库的总称。
官网
常用库概览
-
时间与日期
- timer库提供简易的度量时间和进度显示功能,可以用于性能测试等需要计时的任务,对于大多数的情况他足够用。
- data_time库提供全面且灵活的日期时间库,目的就是简化复杂的日期和时间处理工作。
- chrono库提供“计算机世界”的时间处理服务,实现计算机系统的精确计时。
-
内存管理
Boost提供了诸多库来保证C++高效、正确的内存管理工作,这些库包括:smart_ptr、scoped_ptr、scoped_array、shared_ptr、shared_array、weak_ptr、intrusive_ptr、pool、object_pool、singleton_ptr、pool_alloc。
-
实用工具库
这不是一个整体库,只是把Boost中的一些比较小的、简单的库归为一个“工具库”,这些小工具库不全是类,也有宏,列举为:
- noncopyable组件:实现一个禁止拷贝的类。
- ignore_unused组件:保证程序中暂时不用但又必须保留的变量通过编译(不发出警告,注意,千万不要忽略程序编译过程中编译器抛出的警告,要做到零警告零错误)。
- optional组件:包装“可能产生无效值”的对象,保证这些对象返回一个有效值或者default值。
- assign组件:提供简单、方便的标准库容器赋值或初始化服务,避免为了赋值或初始化一个容器而重复调用insert、push_back方法。
- swap组件:优化后的swap函数。
- singleton组件:单例模式,实现这种模式的类在程序生命周期内只能有且仅有一个实例。
- tribool组件:三态bool类型,包括true、false、indeterminate(未知,不确定)三种状态。
- operators组件:运行用户在自己的类里面仅定义少量的操作符,就可以方便地自动生成其他操作符重载,而且保证正确的语义实现,如一个类只需要定义==和<操作符,就可以自动生成!=、>、<=、>=这四种操作符。
- exception组件:Boost定义的异常类,是对C++标准中的std::exception异常类的改进与强化。
- uuid组件:表示和生成UUID(通用唯一识别码)。
- config组件:Boost开发者(而不是库使用者,即我们)工具,所以不用管。
- utility库:这不是一个有统一主题的Boost库,包含若干很小但很有用的组件工具。
-
字符串与文本处理
- lexical_cast和format主要关注于字符串的表示,可以将数值转化为字符串,对输出做精确的格式化。
- string_ref提供了一个只读视图,可以避免字符串的拷贝代价,是更好的const std::string&的替代品。
- string_algo、tokenizer和xpressive三个库主要关注于字符串的处理,提供了大量的字符串处理函数。
-
正确性与测试
- assert库:提供运行时的断言。
- static_assert库:提供编译期诊断。
- lightweight_test和test库:提供单元测试功能。
-
容器与数据结构
- array库:对C++内建数组的封装,是C++11标准的一部分。
- dynamic_bitset库:结合了vector<bool>和bitset二者的有点,既能动态增长,又方便进行位运算。
- unordered库:散列容器类。
- bimap库:类似与C++标准库的关联容器,但是标准关联容器只是单向关联(映射),而bimap提供双向映射的能力。
- circular_buffer库:大小固定的循环缓冲区。
- tuple库:元组,对比与C++标准库的pair类型,tuple可以容纳不同数目元素,而且每个元素的类型都可以不一样。
- any库:只能容纳一个元素的容器,即该容器size固定为1,但是这个元素的类型可以任意。
- variant库:对C++中union数据结构的扩展和增强,union只能容纳内置类型的数据,而variant没有这个限制。
- multi_array库:多维数组(容器),类似vector<vector<int> >。
- property_tree库:保存了多个属性值的树形数据结构。
-
算法
- foreach组件:对循环程序结构(如for循环)的编译器级别实现,不依赖于高级别编译器,在低级别编译器上也能编译运行;
- minmax组件:最大值、最小值应用;
- algorithm组件:是一个算法集合,包含了很多有用的小算法。
-
数学与数字
- math.constants库:主要包含一些数学常数,如根号2、π等。
- integer库:提供整数处理的头文件和类,具有良好的可移植性。
- rational库:实现了有理数。
- ratio库:表述生活中的一些常用的单位表示。
- crc库:就是计算机网络中的循环冗余校验码,是一种错误检测机制。
- random库:真正的随机数生成器。
-
操作系统相关
Boost提供了一定的跨平台移植功能,这些库屏蔽了操作系统的底层细节,主要包括:system、chrono、cpu_timer、filesystem、program_options库;
- system库:使用轻量级的对象封装了操作系统底层的错误代码和错误信息,使调用操作系统功能的程序可以被很容易地移植到其他系统。
- cpu_timer库:支持对CPU时间片进行高精度的计时。
- filesystem库:是一个可移植的文件系统操作库。
- program_options库:提供类似于gcc那样功能强大的命令行参数处理功能。
-
函数与回调
- ref库:提供引用语义。
- bind库:提供参数绑定功能。
- function库:函数对象”容器“。
- signals2库:基于Boost库中的另一个库signals实现了线程安全的观察者模式。
-
并发编程
Boost提供多个用于并发编程的库或组件来弥补C++标准库在这块的短板,主要包括3个库:atomic、thread、asio。
- atomic库:实现了C++11标准库定义的原子操作库,对不同计算机硬件的底层操作原语进行封装,提供跨平台的原子操作功能;
- thread库:已经成为C++11的标准,为C++增加了线程处理的能力,它提供简明清晰的互斥量、线程、条件变量等概念,可以很容易地创建多线程应用程序,实现并发编程。
- asio库:主要用于网络编程,封装了大量的Socket API。