2009-11-30 35 views
2

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

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

但它看起来像rand()是越来越只计算一次,我的数组包含每个元素的值相同。任何人都可以指出这段代码有什么问题吗?

+0

顺便说一句,您不需要使用boost :: lambda来用随机数填充数组。你可以例如使用'std :: generate(a.begin(),a.end(),&rand);'。 – MP24 2009-11-30 13:05:23

+0

可能是我可以做到这一点,但我仍然想知道为什么这种方法不起作用 – Naveen 2009-11-30 13:06:12

回答

10

好像你需要使用delayed function call

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

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

+0

谢谢..完美工作,我会检查延迟函数调用的工作方式。 – Naveen 2009-11-30 13:19:27

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); 

你需要的是兰特为每个元素调用;这通常使用std :: generate来完成,因为@ MP24在注释中指出:

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