【问题标题】:Random numbers are the same every time function is called每次调用函数时随机数都相同
【发布时间】:2020-01-03 11:04:07
【问题描述】:

每次我运行程序时,这些数字都是随机的,但在同一次运行中它们保持不变。我希望每次调用函数时数字都是随机的。 我确实在 main() 中播种了生成器。

    std::random_device device;
    std::mt19937 generator(device());

我的功能

void takeAssignment(std::vector<Student> &students,
                    const int min, const int max,
                    std::mt19937 e)
{
    std::uniform_int_distribution<int> dist(min, max);
    // all students take the assignment
    for (auto &s : students)
    {
        // random performance
        int score{dist(e)};
        s.addScore(score, max);
        std::cout << s.getName() << "'s score: " << score << std::endl;
    }
}

例如,每次调用函数时,最小值为 0,最大值为 10, 打印函数的输出

Abril Soto's score: 1
Bailey Case's score: 9

在那次运行期间。

将 dist 放入循环也不起作用,数字保持不变。

【问题讨论】:

  • 错字:将std::mt19937 e) 更改为std::mt19937 &amp; e) 它正在获取生成器的副本,而不是更新作为参数传入的生成器。
  • 是的,谢谢!我想过这个问题,但认为它不会解决它。

标签: c++ c++11 random


【解决方案1】:

您通过按值调用传递生成器,从而创建没有种子的副本并生成相同的值。尝试在函数参数中通过引用传递:like

std::mt19937&amp; e

【讨论】:

  • Every std::mt19937 具有 a 状态。这些std::mt19937都有相同的初始状态
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2018-09-08
  • 1970-01-01
  • 1970-01-01
  • 2011-12-06
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多