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   在線閱讀