第一次接触到boost c++这个东西。它是一个c++的标准的库,目前已经有10个boost c++ lib被包含到了c++标准库委员会技术报告里面,有希望成为以后c++标准的一部分。

它是c++的一个准标准库,内部包含了许多C++标准的部分,主要的组成部分有字符串和文本处理,容器,迭代子(iterator),算法,函数对象和高阶编程,泛型编程,预处理元编程,并发编程,数学相关 ,纠错和测试,数据结构,输入输出,跨语言支持,内存相关,语法分析等等。这里我们主要用到数学相关,其他暂不做深入讨论。

1 下载与安装。
这个可以参考boost.org上getting started来做。
现在最新的boost.org版本是1.35.0。因为网络问题,我在国内的站点 上下了个早期的版本1.33.1,这个包是已经编译好了的。

2 测试
自己编写一个测试函数。这里只使用头文件。


#include <boost/lambda/lambda.hpp>
#include <iostream>
#include <iterator>
#include <algorithm>

int main()
{
    using namespace boost::lambda;
    typedef std::istream_iterator<int> in;

    std::for_each(
        in(std::cin), in(), std::cout << (_1 * 3) << " " );
}

gcc -I 把安装的/include子目录加入到include中 -o file source.cpp.


ps : inline function 类似于以前的宏定义,只是,在展开的时候会伴随有语法检查,这样以来可以避免频繁调用小程序,而来又可以避免宏展开不查错的弱点。

3 利用openMP来测试效果
目前的ubuntu 7.10预装的gcc版本大多为4.1. 需要手动升级。
sudo apt-get install gcc-4.2 g++-4.2 。注意装好之后,include和包文件都存放在/user/lib/gcc里面

4 测试。以下面的程序(test.cpp)作测试。
(如果要看串行的把OMP_NUM_THREADS设置为1)

#include   <stdio.h>
#include   <omp.h>
int   main()
{
        #pragma   omp   parallel
        printf( "[%d]   Hello/n ",   omp_get_thread_num());
        return   0;
}

编译gcc-4.2 -fopenmp -o test test.cpp
然后,在shell中输入./hello。如果双核可以看到2个hello
或者可以设置一下
$   export   OMP_NUM_THREADS=8
$   ./hello
[1]   Hello
[0]   Hello
[3]   Hello
[2]   Hello
[7]   Hello
[4]   Hello
[6]   Hello
[5]   Hello
Logo

权威|前沿|技术|干货|国内首个API全生命周期开发者社区

更多推荐