我是新手,并试图编写一些简单的程序来理解它。在下面的代码中,我试图用随机数填充数组。这是我的代码:
using namespace boost::lambda;
srand(time(NULL));
boost::array<int,100> a;
std::for_each(a.begin(), a.end(), _1=rand());
但看起来rand()
仅被评估一次,而我的数组对每个元素都包含相同的值。任何人都可以指出这段代码有什么问题吗?
答案 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);