n要素のstd::vectorを初期化する

すべてを同じ要素で初期化するなら vector のコンストラクターでよい。
そうではなく、異なる要素で初期化したいなら generate_n がつかえる。
たとえば 0 から n-1 の値で埋めたいなら、こうする:

auto&& vector = std::vector<int>();
vector.reserve(n);
int i = 0;
std::generate_n(std::back_inserter(vector), n, [&i] { return i++; });

* * *

generate_n をおもいつけず、先にゼロ初期化してから埋めなおすコードを書いてしまった今日の敗北感。

auto&& vs = std::vector<int>(n);
std::transform(std::cbegin(vs), std::cend::(vs), std::begin(vs),
    [](auto&& _) { return rand(); });

無意味に map (transform)関数をつかい、変換元の値(引数)を無視するというあたりに、どうしようもない敗北を感じるのである。

この記事が気に入ったらサポートをしてみませんか?