gpt4 book ai didi

c++ - std::random_device 在 g++ 中不工作

转载 作者:行者123 更新时间:2023-11-28 05:01:43 26 4
gpt4 key购买 nike

我在 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,它输出总是相同的数字。

为什么会这样?我该如何解决?

海湾合作委员会版本 5.3.0

如果有帮助,我会使用 vs code 进行编程

当然我适本地包括随机

最佳答案

您正在 MinGW 上使用 std::random_device。更具体地说,每次你想要一个随机数时,你都会创建一个新实例。不支持这种用法(或者更确切地说,不产生随机数)。参见 Why do I get the same sequence for every run with std::random_device with mingw gcc4.8.1?因为 MinGW 有这种行为,但要修复您的特定代码,您可以这样做:

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。

关于c++ - std::random_device 在 g++ 中不工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45769671/

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