Генератор псевдослучайных чисел заполняет вектор одинаковыми числами

Вот есть генератор псевдослучайных чисел:

template <typename Number>
class Uniform
{
    mt19937 rng;
    uniform_real_distribution<Number> vg;

public:
    explicit Uniform(size_t seed = 5512943)
        : rng(seed), vg(Number(-1), Number(+1)) {}

    Number operator()() { return vg(rng); }
};

Мне нужно создать функцию, которая заполняла бы вектор через generate. Чуть ниже можно посмотреть, как я это пробовал реализовать. Ошибок нет, числа есть, проблема в том, что числа эти всегда одни и теже. Вопрос в том, как мне исправить данную ситуацию?

    template <typename RanIT> // RanIT тип итератора
    void vector_filling(RanIT from, RanIT to, size_t n)
    {
        Uniform <double> gen;
        for (auto it = from; it < to; ++it)
        {
            it->resize(n);
            generate(it->begin(), it->end(), gen);
        }
    }

Ответы (1 шт):

Автор решения: Harry

Инициализируйте свой генератор случайным значением так:

explicit Uniform(size_t seed = random_device()())

Только у меня встречный вопрос: как вы себе представляете работу

void vector_filling(RanIT from, RanIT to, size_t n)

Если у вас уже есть начальный и конечный итераторы - зачем вам n? Если конечного итератора нет - то что вы передаете? Какой смысл в каждой итерации делать resize? Да и сравнивать итераторы лучше на равенство. Еще - у вас итераторы идут как параметр шаблона, а генератор - строго double. Почему не получать этот тип из типа итератора, например? Или хотя бы дать его как параметр шаблона?

Есть и другие вопросы, но ограничусь пока этими. Вопросы не риторические, но ответьте на них самому себе - это как намеки, что код можно существенно улучшить.

→ Ссылка