对于我的程序,我需要具有不同范围的伪随机整数。到目前为止,我使用了 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++ 新手,想提高我的技能,我发现 Stack Overflow 是获得高质量建议的最佳场所)