Boost C++ Libraries

Boost C++ 函式庫（Libraries）是一組擴充C++功能的經過同行評審（Peer-reviewed）且開放源碼程式庫。大多數的函式為了能夠以開放源碼或者封閉專案的方式運作，而授權於Boost軟體授權條款（Boost Software License）之下。許多Boost的開發人員是來自C++標準委員會，而部份的Boost函式庫成為C++的TR1標準之一。 為了要確保函式庫的效率與彈性，Boost廣泛的使用模板（template）功能。而它是針對各式領域的C++使用者與應用領域（Application Domain）上，包含的函式庫類別從像smart_ptr 函式庫（页面存档备份，存于互联网档案馆）這種類通用函式庫，到像是檔案系統的作業系統抽象層，甚至能夠利用Boost來開發額外的函式庫或是給進階的C++使用者利用，像是MPL（页面存档备份，存于互联网档案馆）。 演算法 并行计算 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） Spirit（英语：Spirit Parser Framework） - 根据EBNF规则对文件进行分析 string algorithms（页面存档备份，存于互联网档案馆） - 文字列演算法 tokenizer（页面存档备份，存于互联网档案馆） - 把字串序列分解成一系列标记（tokens） wave（页面存档备份，存于互联网档案馆） - 模板元编程（Template Metaprogramming） mpl（页面存档备份，存于互联网档案馆） - 模板元编程框架 static assert（页面存档备份，存于互联网档案馆） - 靜態斷言 type traits - 型別的基本属性的模板 其他 现有的 Boost 包含大约150种不同的函数库，以下面几项做范例： 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 也提供独立分布的模拟随机与 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 随机数库（页面存档备份，存于互联网档案馆）。 範例碼演示建立執行緒： #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 Free software主题 Library Technical Report. [2008-08-07]. （原始内容存档于2017-12-11）.  維基教科書中的相關電子教程：Libraries/Boost Boost 官方網站（页面存档备份，存于互联网档案馆） Smart Pointers to boost your code Building Boost libraries（页面存档备份，存于互联网档案馆） Boost 中文翻译（页面存档备份，存于互联网档案馆） 在线阅读