gpt4 book ai didi

c++ - std::default_random_engine 即使改变种子也会生成相同的值?

转载 作者:塔克拉玛干 更新时间:2023-11-03 01:06:50 30 4
gpt4 key购买 nike

我正在尝试实现一个类,该类将用作随机库的某种包装器,以便我可以(我认为)在我的代码中的其他地方以更直观的方式使用它的对象和函数。

在我的标题中有这样的内容:

class RandomDevice{
private:
unsigned long rand_seed;
default_random_engine engine;
public:
RandomDevice(unsigned long n);
int randInt(int min, int max);};

然后在 .cpp 文件中我实现了这两个函数(constructor 和 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){ }

关于c++ - std::default_random_engine 即使改变种子也会生成相同的值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28653255/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com