C++ boost lambdas的使用

C++ boost lambdas的使用,c++,boost,boost-lambda,C++,Boost,Boost Lambda,我是boost的新手,尝试编写一些简单的程序来理解它。在下面的代码中,我试图用随机数填充数组。这是我的密码: using namespace boost::lambda; srand(time(NULL)); boost::array<int,100> a; std::for_each(a.begin(), a.end(), _1=rand()); 使用名称空间boost::lambda; srand(时间(空)); boost::阵列a; std:

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

    using namespace boost::lambda;
    srand(time(NULL));
    boost::array<int,100> a;
    std::for_each(a.begin(), a.end(), _1=rand());
使用名称空间boost::lambda;
srand(时间(空));
boost::阵列a;
std::for_each(a.begin(),a.end(),_1=rand());

但是看起来,
rand()
只计算了一次,而且我的数组中每个元素都包含相同的值。有人能指出这段代码的错误吗?

似乎您需要使用


下面是另一个有趣的情况:

您的代码相当于以下代码:

using namespace boost::lambda;

srand(time(NULL));

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

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

顺便说一下,您不需要使用boost::lambda用随机数填充数组。例如,您可以使用
std::generate(a.begin()、a.end()、&rand)。也许我能做到,但我仍然想知道为什么这种方法不起作用。谢谢。这非常有效,我将检查延迟函数调用的工作方式。
using namespace boost::lambda;

srand(time(NULL));

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

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