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です。これは通常、@ MP24がコメントに記載されているように、std::generateを使用して行われます。

std::generate(a.begin(), a.end(), rand);
于 2009-11-30T13:15:24.827 に答える