2

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

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

但它看起来rand()只被评估一次,我的数组包含每个元素的相同值。有人能指出这段代码有什么问题吗?

4

2 回答 2

10

好像你需要使用延迟函数调用

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

这是另一个有趣的情况:延迟常量和变量

于 2009-11-30T13:14:53.937 回答
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);
于 2009-11-30T13:15:24.827 回答