【发布时间】:2016-11-27 15:33:24
【问题描述】:
我创建了一个类MyRandom来在均匀分布上掷骰子,给定范围作为输入:
MyRandom.cpp
#include "MyRandom.h"
MyRandom::MyRandom(){
gen.seed(static_cast<unsigned int>(std::time(0)));
}
int MyRandom::die(int min, int max){
boost::uniform_int<> dist(min, max);
boost::variate_generator<boost::mt19937&, boost::uniform_int<> > role(gen, dist);
int result = role();
role.engine().seed();
role.distribution().reset();
return result;
}
main.cpp
std::cout << myRandom.die(0, 8) << std::endl;
std::cout << myRandom.die(0, 8) << std::endl;
std::cout << myRandom.die(0, 8) << std::endl;
std::cout << myRandom.die(0, 8) << std::endl;
std::cout << myRandom.die(0, 8) << std::endl;
std::cout << myRandom.die(0, 8) << std::endl;
std::cout << myRandom.die(0, 8) << std::endl;
我一直得到相同的数字(除了第一个,所以我的重置有点工作)。显然,我没有正确播种。我尝试按照建议的here 添加reset(),但没有成功。我错过了什么?
【问题讨论】:
-
只播种一次,而不是每次生成随机数时。
-
成功了。我误解了链接答案的答案。它解决了我连续调用的问题,但不是完整的问题,我需要编辑我的问题。
-
其实我想通了。我通过值而不是通过引用传递了一个对象 MyRandom myRandom = MyRandom(),这导致滚动系列是相同的,因为它是生成器的副本,具有相同的种子:)