Boost (C++函数库)

Boost C++ 函式庫（Libraries）是一組擴充C++功能的經過同行評審（Peer-reviewed）且開放源碼程式庫。大多數的函式為了能夠以開放源碼或者封閉專案的方式運作，而授權於Boost軟體授權條款（Boost Software License）之下。許多Boost的開發人員是來自C++標準委員會，而部份的Boost函式庫成為C++的TR1標準之一。

為了要確保函式庫的效率與彈性，Boost廣泛的使用C++模板功能。而它是針對各式領域的C++使用者與應用領域（Application Domain）上，包含的函式庫類別從smart_ptrsmart_ptr 函式庫這種類通用函式庫，到boost-filesystemBoost Filesystem这种檔案系統的作業系統抽象層，甚至能夠利用Boost來開發額外的函式庫或是給進階的C++使用者利用，例如MPLMPL。

 內容 
演算法
并行计算
thread - 執行緒
context - 用戶層級上下文交換
容器
array - STL的数组容器
Boost Graph Library (BGL) - 通用的图容器，组件和算法
multi-array - N维数组
multi-index containers - 多索引容器
pointer containers - 指针容器
property map - 属性Map
variant - 安全的，基于泛型的，支持访问者模式的联合
fusion - 基于tuple的容器和算法集合
正当性與測試
concept check - 檢查模板參數是否滿足模板的要求
static assert - 編譯期的斷言檢查
Boost Test Library - C++ 单元测试框架
資料結構
dynamic_bitset - std::bitset-的動態轉型
仿函式與高階函式（含無名関数）
bind and mem_fn - 函式的綁定
function - 函式。
functional - C++標準函式之強化。包含以下的内容。
function object traits
negators
binders
adapters for pointers to functions
adapters for pointers to member functions
hash - C++ Technical Report 1（TR1）定義的雜湊表
lambda - λ演算的實作
ref - 標準C++参照（call by reference）的加強、特別強化與函式的呼叫
result_of - 函式型別與回傳值
signals2 - 信号和槽回调的实现托管
泛型
圖
I/O
語言之間的支援（Python用）
迭代器
iterators
operators 
tokenizer 
数学和計算
内存（memory）
pool - 内存池，boost提供4种内存池模型供使用：pool、object_pool、singleton_pool、pool_allocator/fast_pool_allocator
smart_ptr - 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 更好的智能指针
utility - 以下是utility类型的定义。
base from member idiom - 
checked delete - 保证在摧毀一个对象时，必须对该对象的类型有充份了解
next and prior functions - 
noncopyable - 把copy constructor和assign operaotr 宣告为private，不加以实现
addressof - 用于获得变量的地址
result_of - 指涉函式回返型別
序列化
語法分析器
預處理元編程
字串與文字處理（正規表示式等）
lexical_cast - lexical_cast 类別模板
format - 文字格式化，类似printf
iostreams - 新式iostream的補強
regex - 正規表示法（Regular expression）
 - 根据EBNF规则对文件进行分析
string algorithms - 文字列演算法
tokenizer - 把字串序列分解成一系列标记（tokens）
wave -
模板元编程（Template Metaprogramming）
mpl - 模板元编程框架
static assert - 靜態斷言
type traits - 型別的基本属性的模板
其他

 范例 

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

 线性代数 – uBLAS 
Boost 包含了 uBLAS 线性代数函数库，能够藉由基本函数库子函数（BLAS）来支持向量与矩阵形运算。

 此范例表示如何矩阵与向量作乘积：

#include <boost/numeric/ublas/vector.hpp>
#include <boost/numeric/ublas/matrix.hpp>
#include <boost/numeric/ublas/io.hpp>
#include <iostream>

using namespace boost::numeric::ublas;

/* 举例 "y = Ax"  */
int main () 
{
      vector<double> x (2);
      x(0) = 1; x(1) = 2;

      matrix<double> A(2,2);
      A(0,0) = 0; A(0,1) = 1;
      A(1,0) = 2; A(1,1) = 3;

      vector<double> y = prod(A, x);

      std::cout << y << std::endl;
      return 0;
}

 随机数产生 – Boost.Random 
Boost 也提供独立分布的模拟随机与 PRNG 独立性的机率分布，而这些能夠具体的建立产生器。

 此范例表示如何使用 Mersenne Twister 演算法来产生随机

#include <boost/random.hpp>
#include <ctime>

using namespace boost;

double SampleNormal (double mean, double sigma)
{
    // 建立一个 Mersenne twister 随机数产生器
    // 使用 Unix 时间设定 seed
    static mt19937 rng(static_cast<unsigned> (std::time(0)));

    // 选择高斯机率分布
    normal_distribution<double> norm_dist(mean, sigma);

    // 使用 function 的形式，生成随机数据产生器
    variate_generator<mt19937&, normal_distribution<double> >  normal_sampler(rng, norm_dist);

    // 传回样本分布结果
    return normal_sampler();
}
更详细的说明请参阅 Boost 随机数库。

 多執行緒 – Boost.Thread 
範例碼演示建立執行緒：
#include <boost/thread/thread.hpp>
#include <iostream>

using namespace std; 

void hello_world() 
{
  cout << "Hello world, I'm a thread!" << endl;
}

int main(int argc, char* argv[])
{
  // 開始一條使用 "hello_world" function 的新執行緒
  boost::thread my_thread(&hello_world);
  // 等待執行緒完成工作
  my_thread.join();

  return 0;
}

 Introduction to Boost.Threads in Dr. Dobb's Journal. (2002)
 Boost.Threads API reference。
 threadpool library based on Boost.Thread

 引用 

 外部連結 

 Boost 官方網站
 Smart Pointers to boost your code
 Building Boost libraries
 Boost 中文翻译 在线阅读

Category:C++
Category:C++ Template Library
Category:C++函式庫
Category:自由發展元件與函式庫