简介
boost是一套开放源代码的,高度可移植的C++库。它相当于C++标准库(STL)的改进与扩展。并且,它其中的不少模块,已被下一代C++标准库采用。的确,boost库非常注重与C++标准库之间协同性,用户对STL的许多学习或使用的体验,在接触boost时,会很自然地“似曾相识”。
定位上,boost 库希望自己是一个可用于广泛的、不同业务方向的应用都能使用的基础库——这完全和STL的定义一致,但STL太过于基础了,我们来做一个比较吧。
首先,boost是一个基础库。boost不像wxWidgets那样具备一个明确的业务方向:GUI(虽然wxWidgets也提供了众多其它功能)。boost提供的功能偏向基础设施,所以它的应用目标更为广泛。
然后,boost和STL比较,STL作为C++必须实现的标准库,它几乎就是在提供成型的,可复用的“数据结构”与“算法”的大全。boost,特别是2008年发布的1.36版,提供了大量高级功能。当前包括:“正则表达式”、“线程”、“网络”、“数学”、“图(数学)”、“字符串”、“CRC校验”、“文件”、“日期、时间”、“图(图形处理)”等等模块。
如果在不同语言之间做横向比较,那么我们会发现,Java和C# (.NET)语言,它们的标准库所提供的功能无比广泛,而C++的标准库则相当可怜——甚至连“线程”都没有提供。boost库非常好地弥补了C++的这一点不足。
和STL类似,boost大量采用现代C++的泛型编程技术。因此多数模块,我们在使用时,仅仅需要引用其“头文件”;另外有10来个必须或者建议进行编译的模块——但本书下面的教程并没有对这10来个库进行完整编译——至少有两个原因:其一、我们并不立即就用到全部的boost库;其二、如果完整编译,需要使用的时间,可能长达5个小时。
安装
#include <iostream>
#include <boost/regex.hpp>
using namespace std;
{
return boost::regex_split(std::back_inserter(l), s);
}
{
string s = "i am a boy!";
list<string> l;
unsigned result = tokenise(l, s);
cout << result << " tokens found" << endl;
while(l.size())
{
s = *(l.begin());
l.pop_front();
cout << s << endl;
}
return 0;
}
运行成功!