pour mon programme J'ai besoin d'entiers pseudo-aléatoires avec différentes plages. Jusqu'à présent, j'ai utilisé la fonction rand() mais elle a ses limites.Encapsulating boost :: random pour la facilité d'utilisation pour remplacer rand()
J'ai trouvé que la bibliothèque boost :: random était un bien meilleur remplacement, mais je ne voulais pas créer de générateurs aléatoires partout.
(J'ai besoin d'entiers aléatoires dans de nombreuses classes, parce que c'est un logiciel de test de stress qui rend chaque décision pseudo-aléatoire (-> un test doit être répétable en définissant le même départ)).
C'est pourquoi j'ai capsuled boost :: random dans ma propre classe.
L'idée est de faciliter l'utilisation de sorte qu'il est presque aussi simple que la méthode rand C++()
#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;
};
La génération d'un nombre aléatoire dans une plage donnée sera désormais aussi facile que
#include "Random.h"
Random::Get()->SetSeed(123123); // If you want to make the run repeatable
int dice = Random::Get()->Random(1,6);
question:
y at-il quelque chose de mal avec cette façon de générer des nombres aléatoires?
Grand frais généraux que je n'ai pas reconnu?
Pure Technique de programmation périmée ou périmée?
(je suis encore nouveau pour C++ et que vous souhaitez améliorer mes compétences, et je l'ai trouvé que Stack overflow est le meilleur endroit pour obtenir des conseils de haute qualité)
Une réponse tardive, mais il peut être utile d'examiner ma réponse ici: http://stackoverflow.com/a/10895385/15161 – slashmais