c++ - 每次调用函数时随机数都是相同的

标签 c++ c++11 random

每次运行程序时,这些数字都是随机的,但在同一次运行期间它们保持不变。我希望每次调用该函数时数字都是随机的。 我确实在 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

关于c++ - 每次调用函数时随机数都是相同的,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59577450/

相关文章:

c++ - 如何在 C++ 中创建字节数组?

c++ - 将 std::shared_ptr<char> 转换为 std::shared_ptr<unsigned char>

java - 如何随机化除黑色之外的颜色?

bash - 从 shell 脚本中的目录中选择随机文件的最佳方法

c++ - STL 计数算法返回不正确的值。

c++ - 定义中的模板函数

c++ - 跨模板特化共享的静态成员

C++98 诉 C++11 std::set::insert 规范

.net - 范围为0或1时.NET随机类选择始终为0

c++ - 在同一个头文件中定义但在类外部的模板构造函数未被识别