c++ - 使用 Mersenne-Twister 生成多个随机值

标签 c++

我最近在使用 Mersenne-Twister 算法在 C++ 中生成随机数时遇到了一个问题。当遍历for循环并使用cout输出生成的数字时,它会重复输出相同的数字。例如,它输出类似 11 11 11 而不是 11 43 124。我将如何用代码实现这一目标?我当前的代码发布在下面。

#include <iostream>
#include <random>
#include <Windows.h>
#include <unistd.h>

using namespace std;

int main() 
{
  random_device rd;
  mt19937 gen(rd());
  uniform_int_distribution<> dis(15000, 120000);
  int random = dis(gen);

  int i = 1;
  while (i = 1) {
    cout << random << endl;
}
return 0;

非常感谢任何帮助。

最佳答案

random 是一个整数对象。整数对象的值不会改变,除非您设置它的值。您在这里所做的类似于掷骰子,记下随机结果,然后反复阅读您所写的内容,期望写入的结果会发生变化。

您可以通过在分布函数上多次应用生成器对象来生成多个随机数:

while (...)
    cout << dis(gen) << endl;

关于c++ - 使用 Mersenne-Twister 生成多个随机值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48552933/

相关文章:

c++ - 将堆栈分配的函数返回值放入 unique_ptr

c++ - boost spirit 业力真实发电机性能

c++ - 将可变参数模板参数转发给多个类成员

C++ 类型转换与隐式构造函数

c++ - 在 C++ 中的自定义字符串类中实现插入?

c++ - 字符串流问题,我认为我的代码看起来不错,但它显示奇怪的符号

c++ - 添加私有(private)成员变量如何破坏 C++ ABI 兼容性?

c++ - boost python 对象的生命周期

c++ - Gtk+ 删除 Gtk::Treeview 上第一列的填充/边距

c++ - 具有自己成员的成员 Vector 的类