c++ - 如何在不使用时间作为种子的情况下在 C++ 中生成随机数

标签 c++ c++11 random

我的程序应该生成最大固定值为 9999 的随机数。这些数字用于创建对象。现在的问题是,当使用时间作为种子时,如果我一个接一个地创建两个对象,那么两个对象都将使用相同的数字创建(因为时间在此过程中没有改变)。

我怎样才能更有效地做到这一点,以便每次运行程序时都能生成一个不同的随机数?

最佳答案

关键是 - 只创建一个随机对象(或其状态)一次,然后重新使用它来获取下一个值。这种方法通常用于其他语言,例如 Java、C#、Python。

有关较早的 C 风格示例,请参阅 rand , 这是你感兴趣的位

//initialize random seed ONCE
srand (time(NULL));

// call MANY TIMES for next value
rand();
rand();
rand();

C++11 相同的想法,例如 uniform distribution

// Setup ONCE
std::random_device rd;
std::mt19937 gen(rd());
std::uniform_int_distribution<> dis(1, 9999);

// Call MANY TIMES to get next random number 
dis(gen);
dis(gen);
dis(gen);

关于c++ - 如何在不使用时间作为种子的情况下在 C++ 中生成随机数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41875884/

相关文章:

c++ - c++,将enable_if与现有模板类一起使用?

c++ - 在 C++ 转换算法中使用 back_inserter

c++ - 从套接字进行异步读取时出现 Heisenbug

javascript - 如何随机淡入 LI 元素? (jquery)

c# - 到处获取所有按下的键

c++ - C "undefined reference",但我在同一个文件中指定了它

关于数组的 C++ 问题

c++ - 不同风格的 shared_ptr 之间的差异

c# - 随机数看起来不是很随机

c++ - 相同的随机数