При использовании reserve
количество элементов в векторе не увеличивается. Это означает, что разница между begin(vec)
и end(vec)
равна 0 (или каков бы ни был размер вашего вектора в начале). Есть две возможности:
vec.resize(N);
std::generate(vec.begin(), vec.end(), [](){return distribution(gen);});
// or
vec.reserve(N); // Not necessary but sensible.
std::generate_n(std::back_inserter(vec), N, [](){return distribution(gen);});