参照を使用します。std::generate の動作は次と同等である必要があります。
template <class ForwardIterator, class Generator>
void generate ( ForwardIterator first, ForwardIterator last, Generator gen )
{
while (first != last) {
*first = gen();
++first;
}
}
しかし、マトリックスを0〜99の数字で埋めようとすると。代わりに、0 ~ 9 の 10 行を取得します。何故ですか?
std::vector< std::vector<int> > m;
#ifdef GENERATE
struct Generator{
int seq;
Generator():seq(0){};
int operator()(){return seq++;};
} generator;
#elif defined FOR_EACH
int i = 0;
auto increment = [&i](int &a){a = i++;};
#endif
int x = 10, y = 10;
m.resize(x);
for(auto &v : m)
{
v.resize(y);
#ifdef GENERATE
generate(begin(v), end(v), generator);
#elif defined FOR_EACH
for_each(begin(v),end(v), increment);
#endif
}