使用boost lambdas

时间:2009-11-30 12:56:57

标签: c++ boost boost-lambda

我是新手,并试图编写一些简单的程序来理解它。在下面的代码中,我试图用随机数填充数组。这是我的代码:

    using namespace boost::lambda;
    srand(time(NULL));
    boost::array<int,100> a;
    std::for_each(a.begin(), a.end(), _1=rand());

但看起来rand()仅被评估一次,而我的数组对每个元素都包含相同的值。任何人都可以指出这段代码有什么问题吗?

2 个答案:

答案 0 :(得分:10)

好像你需要使用delayed function call

std::for_each(a.begin(), a.end(), boost::lambda::_1= boost::lambda::bind(rand) );

这是另一个有趣的情况:Delaying constants and variables

答案 1 :(得分:4)

您的代码与以下代码相同:

using namespace boost::lambda;

srand(time(NULL));

boost::array<int, 100> a;
int i = rand();

std::for_each(a.begin(), a.end(), _1=i);

你想要的是为每个元素调用rand;这通常是使用std :: generate完成的,如评论中提到的@ MP24:

std::generate(a.begin(), a.end(), rand);