для моей программы мне нужны псевдослучайные числа с разными диапазонами.
До сих пор я использовал функцию rand (), но у нее есть свои ограничения.
Я обнаружил, что библиотека boost :: random - гораздо лучшая замена, но я не хотел создавать случайные генераторы повсюду.
(Мне нужны случайные целые числа во многих классах, потому что это программное обеспечение для стресс-тестирования, которое принимает каждое решение псевдослучайно (-> тестовый прогон должен повторяться, устанавливая одинаковое начальное начальное число)).
Вот почему я учился в классе boost :: random в моем собственном классе.
Идея, стоящая за этим, заключается в том, чтобы облегчить использование, чтобы оно было почти таким же простым, как
метод C ++ rand ()
#include "boost/shared_ptr.hpp"
#include "boost/random.hpp"
class Random{
public:
typedef boost::shared_ptr< Random > randomPtr;
typedef boost::mt19937 randomGeneratorType;
static randomPtr Get(){
static randomPtr randomGen( new RandomGenerator() );
return randomGen;
}
void SetSeed(int seed){
randomGenerator.seed( seed );
}
int Random( int lowerLimit, int upperLimit ){
boost::uniform_int<> distribution( lowerLimit, upperLimit );
boost::variate_generator< randomGeneratorType&, boost::uniform_int<> >
LimitedInt( randomGenerator , distribution );
return LimitedInt();
}
private:
// prevent creation of more than one object of the LogManager class
// use the Get() method to get a shared_ptr to the object
Random():
randomGenerator() //initialize randomGenerator with default constructor
{}
RandomGenerator( const RandomGenerator& orig ){};
randomGeneratorType randomGenerator;
};
Генерация случайного числа в заданном диапазоне теперь будет так же проста, как и
#include "Random.h"
Random::Get()->SetSeed( 123123 ); // If you want to make the run repeatable
int dice = Random::Get()->Random(1,6);
Вопрос:
Что-то не так с этим способом генерации случайных чисел?
Большие накладные расходы я не узнал?
Чистое зло или устаревшая методика программирования?
(Я все еще новичок в C ++ и хочу улучшить свои навыки, и я обнаружил, что переполнение стека
лучшее место, чтобы получить качественную консультацию)