我正在尝试实现一个类,该类将充当随机库的包装器,这样我就可以在代码中的其他地方以(我认为)更直观的方式使用它的对象和函数。
在我的标题中,我有这样的内容:
class RandomDevice{
private:
unsigned long rand_seed;
default_random_engine engine;
public:
RandomDevice(unsigned long n);
int randInt(int min, int max);};
然后在 .cpp 文件中我实现这两个函数(构造函数和randInt
)像这样:
RandomDevice::RandomDevice(unsigned long n){
rand_seed = n;
default_random_engine engine;
engine.seed(n);
}
int RandomDevice::randInt(int min, int max){
uniform_int_distribution<int> distribution(min, max);
return distribution(engine);
}
最后,在我的main.cpp
我这样测试这些函数:
int main(){
unsigned long seed = 1;
RandomDevice my_rand(seed);
cout << "random integer: " << my_rand.randInt(0, 10) << endl;
}
问题是,无论我将种子设置为什么main.cpp
,我总是得到相同的随机数值(不仅仅是randInt
,我还有其他发行版)。我也尝试过将种子设置为time(NULL)
但同样的问题出现了。
我对这个实在是摸不着头脑。谢谢!
default_random_engine engine;
engine.seed(n);
这是本地播种engine
,它在构造函数结束时被销毁,而不是类成员engine
,最终被默认构造。
请改用成员初始值设定项列表:
RandomDevice::RandomDevice(unsigned long n) : rand_seed(n), engine(n){ }
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)