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

Oth*_*iri 1 c++ random c++11

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

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

ole*_*sii 8

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

对于较旧的C风格示例,请参阅rand,这是您感兴趣的位

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

// call MANY TIMES for next value
rand();
rand();
rand();
Run Code Online (Sandbox Code Playgroud)

C++ 11相同的想法,例如具有均匀分布

// 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);
Run Code Online (Sandbox Code Playgroud)