Boost (C++函数库)

Boost C++ 函式库（Libraries）是一组扩充C++功能的经过同行评审（Peer-reviewed）且开放源码程式库。大多数的函式为了能够以开放源码或者封闭专案的方式运作，而授权于Boost软体授权条款（Boost Software License）之下。许多Boost的开发人员是来自C++标准委员会，而部份的Boost函式库成为C++的TR1标准之一。
为了要确保函式库的效率与弹性，Boost广泛的使用C++模板功能。而它是针对各式领域的C++使用者与应用领域（Application Domain）上，包含的函式库类别从smart_ptr这种类通用函式库，到boost-filesystem这种档案系统的作业系统抽象层，甚至能够利用Boost来开发额外的函式库或是给进阶的C++使用者利用，例如MPL。

**内容**
演算法
*并行计算
** threaddate=20071021182442  - 执行绪
** contextdate=20190924173459  - 用户层级上下文交换
*容器
** arraydate=20080829213552  - STL的数组容器
** Boost Graph Library (BGL)date=20080821220341  - 通用的图容器，组件和算法
** multi-arraydate=20080905140301  - N维数组
** multi-index containersdate=20080113212825  - 多索引容器
** pointer containersdate=20081202133945  - 指针容器
** property map - 属性Map
** variantdate=20081011063518  - 安全的，基于泛型的，支持访问者模式的联合
** fusiondate=20080517054137  - 基于tuple的容器和算法集合
*正当性与测试
** concept checkdate=20081202205949  - 检查模板参数是否满足模板的要求
** static assertdate=20081203011214  - 编译期的断言检查
** Boost Test Library - C++ 单元测试框架
*资料结构
** dynamic_bitsetdate=20080827235124  - std::bitset-的动态转型
*仿函式与高阶函式（含无名関数）
** binddate=20080906151923  and  mem_fndate=20080113213814  - 函式的绑定
** functiondate=20081011163142  - 函式。
** functionaldate=20080101113836  - C++标准函式之强化。包含以下的内容。
*** function object traitsdate=20081202222247 
*** negatorsdate=20081202215539 
*** bindersdate=20081205030621 
*** adapters for pointers to functionsdate=20080307231117 
*** adapters for pointers to member functionsdate=20081202220818 
** hashdate=20080930164212  - C++ Technical Report 1（TR1）定义的杂凑表
** lambdadate=20081011063855  - λ演算的实作
** refdate=20081012151255  - 标准C++参照（call by reference）的加强、特别强化与函式的呼叫
** result_ofdate=20081204140615  - 函式型别与回传值
** signals2date=20190924173507  - 信号和槽回调的实现托管
*泛型
*图
*I/O
*语言之间的支援（Python用）
*迭代器
** iteratorsdate=20041009145549 
** operatorsdate=20081011163433  
** tokenizerdate=20080907211346  
*数学和计算
*内存（memory）
** pooldate=20080113205027  - 内存池，boost提供4种内存池模型供使用：pool、object_pool、singleton_pool、pool_allocator/fast_pool_allocator
** smart_ptrdate=20080724032159  - boost的smart_ptr中提供了4种智能指针，作为std::auto_ptr的补充
*** scoped_ptr - 具作用域指针，与std::auto_ptr类似，但不能转让所有权，用于确保离开作用域能够正确地删除动态分配的对象
*** scoped_array - 配合scoped_ptr使用
*** shared_ptr - 
*** shared_array - 配合shared_ptr使用
*** weak_ptr - shared_ptr 的观察者，避免shared_ptr循环引用，是一种辅助指针
*** intrusive_ptr - 比 shared_ptr 更好的智能指针
** utilitydate=20081204140615  - 以下是utility类型的定义。
*** base from member idiom - 
*** checked deletedate=20080905115246  - 保证在摧毁一个对象时，必须对该对象的类型有充份了解
*** next and prior functionsdate=20081204140615  - 
*** noncopyabledate=20081204140615  - 把copy constructor和assign operaotr 宣告为private，不加以实现
*** addressofdate=20081204140615  - 用于获得变量的地址
*** result_ofdate=20081204140615  - 指涉函式回返型别
*序列化
*语法分析器
*预处理元编程
*字串与文字处理（正规表示式等）
** lexical_cast - lexical_cast 类别模板
** formatdate=20081202214711  - 文字格式化，类似printf
** iostreamsdate=20071224064500  - 新式iostream的补强
** regex - 正规表示法（Regular expression）
**Spirit - 根据EBNF规则对文件进行分析
** string algorithmsdate=20080830032859  - 文字列演算法
** tokenizerdate=20080907211346  - 把字串序列分解成一系列标记（tokens）
** wavedate=20081204142215  -
*模板元编程（Template Metaprogramming）
** mpldate=20080517030035  - 模板元编程框架
** static assertdate=20081203011214  - 静态断言
** type traits - 型别的基本属性的模板
*其他

**范例**
现有的 Boost 包含大约150种不同的函数库，以下面几项做范例：

**线性代数 – uBLAS**
Boost 包含了 uBLAS 线性代数函数库，能够借由基本函数库子函数（BLAS）来支持向量与矩阵形运算。- 此范例表示如何矩阵与向量作乘积：

#include 
#include 
#include 
#include 
using namespace boost::numeric::ublas;
/* 举例 "y = Ax"  */
int main () 
{
vector x (2);
x(0) = 1; x(1) = 2;

matrix A(2,2);
A(0,0) = 0; A(0,1) = 1;
A(1,0) = 2; A(1,1) = 3;
vector y = prod(A, x);
std::cout 

**随机数产生 – Boost.Random**
Boost 也提供独立分布的模拟随机与 PRNG 独立性的机率分布，而这些能够具体的建立产生器。- 此范例表示如何使用 Mersenne Twister 演算法来产生随机
#include 
#include 
using namespace boost;
double SampleNormal (double mean, double sigma)
{
// 建立一个 Mersenne twister 随机数产生器
// 使用 Unix 时间设定 seed
static mt19937 rng(static_cast (std::time(0)));
// 选择高斯机率分布
normal_distribution norm_dist(mean, sigma);
// 使用 function 的形式，生成随机数据产生器
variate_generator >  normal_sampler(rng, norm_dist);
// 传回样本分布结果
return normal_sampler();
}
更详细的说明请参阅  Boost 随机数库date=20081202172712 。

**多执行绪 – Boost.Thread**
范例码演示建立执行绪：
#include 
#include 
using namespace std; 
void hello_world() 
{
cout -  Introduction to Boost.Threadsdate=20080905162611  in Dr. Dobb's Journal. (2002)- Boost.Threads  API referencedate=20081013005142 。-  threadpool librarydate=20200615195035  based on Boost.Thread

**引用**

**外部连结**
  Boost 官方网站date=20110717142414 -  Smart Pointers to boost your code-  Building Boost librariesdate=20090205120125 -  Boost 中文翻译date=20100123023928   在线阅读