2009-11-30 65 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);