我目前正在学习C++,有一个关于random_device的问题。
我正在尝试模拟蒙提霍尔问题。为此,我需要随机整数来选择随机门。因此,我尝试编写一个函数来返回随机整数以实现这个目的。
int guessGetRandomIndex() {
std::random_device rd; // obtain a random number from hardware
std::mt19937 eng(rd()); // seed the generator
std::uniform_int_distribution<> distr(0, 2);
return distr(eng);
然而,当我在main()中尝试获取随机整数时,我一直得到相同的数字。
vector<int> v = {0, 1, 2, 3, 4, 5};
for (auto & j : v){
int random = guessGetRandomIndex();
std::cout << random << ' ';
}
Output: 1 1 1 1 1 etc.
然而,当我将随机设备放入主循环并在那里执行相同的操作时,我成功地获得了随机整数。
std::random_device rd; // obtain a random number from hardware
std::mt19937 eng(rd()); // seed the generator
std::uniform_int_distribution<> distr(0, 2); // define the range
vector<int> v = {0, 1, 2, 3, 4, 5};
for (auto & j : v){
std::cout << distr(eng) << ' ';
}
Output: 1 2 1 2 0 1
为什么会这样呢?我只是想封装随机设备。我认为每次调用函数时它会生成新的随机数,就像Python中的random.randint一样,但我想C++中可能还有其他事情发生。
提前感谢您的帮助。
random_device
和mt19937
)都设置为静态。 - WhozCraig