Boost库是什么(C++_Boost的详细资料简介)

Boost是一个准标准库,相当于STL的延续和扩展。它的设计理念接近STL,使用泛型最大化重用。但相比STL,boost更实用。STL侧重于算法部分,而boost包含了很多工具类,可以完成更具体的工作。

Boost主要包括以下几类:字符串和文本处理、容器、迭代器、算法、函数对象和高级编程、泛型编程、模板元编程、预处理元编程、并发编程、数学关联、纠错和测试、数据结构、输入/输出、跨语言支持、内存关联、语法分析和杂项。有些库是跨类别包含的,也就是说,它们同时属于这个类别和那个类别。

在文本处理部分,使用conversion/lexcial_cast类,通过“C”方法实现数值类型与字符串之间的转换。主要替代C标准库中的atoi、itoa等函数。当然,最大的一个优点是它支持泛型。

格式库提供了对流的“类printf”功能。替换%d,%s等参数的方法。在printf中很多情况下是非常方便的,但是STL中的iostream却缺少这样的功能。这个函数被添加到FormatStream中,它比原来的printf更强大。

Regex,这个我就不多说了,正则表达式库。需要做字符串分析的人会明白正则表达式有多有用。

Spirit,这是一个LL分析框架,可以根据EBNF规则分析文件。别告诉我我不知道EBNF是什么。编译器所做的可以被使用。大多数人都不怎么用。

标记器库。我曾经在CSDN上看到有人问如何用逗号将一个字符串分成字符串数组。也许有人羡慕VB的拆分功能。现在,boost的tokenizer也有同样的功能。如果我没记错的话,这个记号赋予器也支持正则表达式。是不是很棒?

Array:为固定大小的数组提供一个包。喜欢用数组,但又担心数组定位,数组大小等功能的人,现在开心了。

Dynamic_bitset,动态分配大小的位集。我们知道STL中有一个bitset,为bit操作提供了很多便利。不幸的是,它的大小需要在编译时指定。现在,bitset出现了,它在运行时动态分配大小。

图表.提供了图的容器和相关算法。我还没有在程序中使用图表。有需要的可以看看。

Multi_array提供了多维数组的封装,应该还是有用的。

并发编程只有一个库,thread,提供了一个可移植的线程库,但是我觉得在Windows平台上用处不大。因为是基于Posix线程的,所以Windows对Posix的支持不是很好。

下面的数学和数值类包括许多用于数值处理的类库。我对数学类不太熟悉,但是有一些类还是很有用的,比如有理分式类,随机随机数类等等。

Static_assert,提供编译器的assert函数。

测试库,一个单元测试框架,很不错。

Concept_check在泛型编程时提供了对泛型的一点检查。它并不完美,但总比没有好。

数据类any,一个可以包含不同对象的安全类。把它作为容器的元素类型,那么这个容器就可以包含不同类型的元素。比用void *更安全。

Compressed_pair,类似于STL中的pair。但是,空元素是优化的。

Tuple,呵呵,也许是某些人梦寐以求的吧。您可以让函数返回多个值。

跨语言支持:python,呵呵,好东西,可以把C的类和函数映射到Python上使用。这里有一些关于boost.python在http://dev.csdn.net/article/19/19828.shtm, http://dev.csdn.net/article/19/19829.shtm, http://dev.csdn.net/article/19/19830.shtm http://dev.csdn.net/article/19/19831.shtm. CSDN的中文资料

池:内存池,呵呵,不用怕频繁分配释放内存造成内存碎片,也不用自己努力实现。

Smart_ptr:智能指针,现在不用担心内存泄露。但是,C中的智能指针并不完美。使用的时候一定要小心,不要做太纯熟的操作。

Date_time,这是一个平台和类库独立的实现。如果程序需要跨平台,可以考虑用这个。

定时器,提供一个定时器。虽然不是Windows中基于消息的定时器,但据说可以用来测量语句的执行时间。

uitlity中提供了一个不可复制的类,可以实现不可复制的类。在许多情况下,我们需要避免复制一个类,比如表示文件句柄的类。如果文件句柄被两个实例共享,操作上会有很多问题,语义上也没有意义。避免实例复制的一般方法是私有化副本构造和operator=。现在,只要继承这个类,就清楚多了。

Value_initialized:值初始化可以保证所有声明的对象都被显式初始化,但是这样真的实用吗?好像写这个比直接写初始化还累。呵呵,不同的人有不同的看法。

除了regex、python、test需要编译发出库才能使用,其他大部分都可以直接应用到源代码中,比较方便。其实这些库并不难用。主要原因是有些库需要相关的背景知识,比如元编程、STL、泛型编程等等。