Boost简介

时间:2024-03-16 08:24:23

Boost是为C++语言标准库提供扩展的一些C++程序库的总称。Boost库是一个可移植、提供源代码的C++库,为标准库的后备,是C++标准化进程的开发引擎之一,是为C++语言标准库提供扩展的一些C++程序库的总称。

官网

https://www.boost.org/

Boost简介

常用库概览

  • 时间与日期

  1. timer库提供简易的度量时间和进度显示功能,可以用于性能测试等需要计时的任务,对于大多数的情况他足够用。
  2. data_time库提供全面且灵活的日期时间库,目的就是简化复杂的日期和时间处理工作。
  3. 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中的一些比较小的、简单的库归为一个“工具库”,这些小工具库不全是类,也有宏,列举为:

  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库,包含若干很小但很有用的组件工具。

  • 字符串与文本处理

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

  • 正确性与测试

  1. assert库:提供运行时的断言。
  2. static_assert库:提供编译期诊断。
  3. lightweight_test和test库:提供单元测试功能。

  • 容器与数据结构

  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库:保存了多个属性值的树形数据结构。 

  • 算法

  1. foreach组件:对循环程序结构(如for循环)的编译器级别实现,不依赖于高级别编译器,在低级别编译器上也能编译运行;
  2. minmax组件:最大值、最小值应用;
  3. algorithm组件:是一个算法集合,包含了很多有用的小算法。

  • 数学与数字

  1. math.constants库:主要包含一些数学常数,如根号2、π等。
  2. integer库:提供整数处理的头文件和类,具有良好的可移植性。
  3. rational库:实现了有理数。
  4. ratio库:表述生活中的一些常用的单位表示。
  5. crc库:就是计算机网络中的循环冗余校验码,是一种错误检测机制。
  6. random库:真正的随机数生成器。

  • 操作系统相关

        Boost提供了一定的跨平台移植功能,这些库屏蔽了操作系统的底层细节,主要包括:system、chrono、cpu_timer、filesystem、program_options库;

  1. system库:使用轻量级的对象封装了操作系统底层的错误代码和错误信息,使调用操作系统功能的程序可以被很容易地移植到其他系统。
  2. cpu_timer库:支持对CPU时间片进行高精度的计时。
  3. filesystem库:是一个可移植的文件系统操作库。
  4. program_options库:提供类似于gcc那样功能强大的命令行参数处理功能。

  • 函数与回调

  1. ref库:提供引用语义。
  2. bind库:提供参数绑定功能。
  3. function库:函数对象”容器“。
  4. signals2库:基于Boost库中的另一个库signals实现了线程安全的观察者模式。

  • 并发编程

        Boost提供多个用于并发编程的库或组件来弥补C++标准库在这块的短板,主要包括3个库:atomic、thread、asio。

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