我在Windows中使用g ++与MinGW编译我的c ++代码,如下所示:
std::mt19937_64 rng(std::random_device{}());
std::uniform_int_distribution<int> dist(0, words.size() - 1);
std::string curr = words[dist(rng)];
正如你所看到的,这会从std :: string数组中提取一个随机单词,但是当我输入该单词时,它总是一样的,我已经意识到问题出在std :: random_device中,它总是输出相同的数字。
为什么会这样?我该如何解决?
gcc version 5.3.0
如果可以提供帮助,我会使用vs代码进行编程
当然,我正确包含随机
答案 0 :(得分:1)
您在MinGW上使用std::random_device
。更具体地说,您每次需要随机数时都要创建一个新实例。不支持此用法(或者更确切地说,不生成随机数)。有关MinGW具有此行为的事实,请参阅Why do I get the same sequence for every run with std::random_device with mingw gcc4.8.1?,但为了修复您的特定代码,您可以执行以下操作:
std::mt19937_64 rng(std::random_device{}());
std::uniform_int_distribution<int> dist(0, words.size() - 1);
for (int ii = 0; ii < 100; ++ii) {
std::string curr = words[dist(rng)];
}
也就是说,重复使用相同的random_device
,而不是一次。如果程序运行之间的随机性非常重要,请考虑播种或使用不同的RNG。