Я должен сгенерировать случайное число, используя библиотеки повышения, я использую этот код:
boost::mt19937 gen;
boost::uniform_int<> dist(kUIMinManPort, kUIMaxManPort);
boost::variate_generator< boost::mt19937&, boost::uniform_int<> >
var(gen, dist);
unsigned int value = (unsigned int)var();
return boost::lexical_cast<std::string>(value);
Очевидно, я импортирую все необходимые библиотеки. Ну, код компилируется, но проблема в том, что я получаю те же числа ....
ОК ОК ... не волнуйтесь, я не новичок, когда говорю о случайной (или, лучше, псевдослучайной) генерации чисел. Я знаю, что мы должны предоставить начальное число и что в зависимости от этого начального числа будет предоставлена последовательность псевдослучайных чисел.
Итак, мой код становится таким:
boost::mt19937 gen(static_cast<unsigned int>(std::time(0)));
boost::uniform_int<> dist(kUIMinManPort, kUIMaxManPort);
boost::variate_generator< boost::mt19937&, boost::uniform_int<> >
var(gen, dist);
unsigned int value = (unsigned int)var();
return boost::lexical_cast<std::string>(value);
Ну, проблема в том, что мы получаем почти одинаковое число каждый раз, когда я вызываю эту функцию (внутри цикла for).
Я подозреваю, что зависящее от времени начальное число, предоставляемое ядру генерации вспомогательной случайной библиотеки, не изменяется в течение периода времени цикла, поэтому каждый раз, когда я запускаю цикл, получаю почти одинаковое число ... Вопрос в том, как эффективно решить эту проблему. Я полагаю, что дана лучшая практика ... Ну, я не единственный, у кого такая проблема:)
Спасибо ...