多くの言語には、コレクションの初期化に役立つジェネレーターがあります。C ++では、ベクトルを均一に初期化したい場合は、次のように記述できます。
std::vector<int> vec(10, 42); // get 10 elements, each equals 42
その場で異なる値を生成したい場合はどうなりますか?たとえば、10個のランダムな値、または0から9までの連続した数字で初期化しますか?この構文は便利ですが、C++11では機能しません。
int cnt = 0;
std::vector<int> vec(10, [&cnt]()->int { return cnt++;});
反復関数呼び出しによってコレクションを初期化する良い方法はありますか?私は現在、この醜いパターンを使用しています(ループよりもはるかに読みやすく/短い):
std::vector<int> vec;
int cnt = 0;
std::generate_n(std::back_inserter(vec), 10, [&cnt]()->int { return cnt++;});
役立つことがあり、それは最初のコンストラクターの欠如を説明するでしょう。関数と呼び出し回数を受け取るイテレーターを想像できるので、コンストラクターは
vector ( InputIterator first, InputIterator last);
該当します。しかし、私は標準ライブラリでこのようなものを見つけられませんでした。私はそれを逃しましたか?最初のコンストラクターが標準に到達しなかった別の理由はありますか?