我希望能够做这样的事情(显然不是有效的C++):
rng1 = srand(x)
rng2 = srand(y)
//rng1 and rng2 give me two separate sequences of random numbers
//based on the srand seed
rng1.rand()
rng2.rand()
Run Code Online (Sandbox Code Playgroud)
有没有办法在C++中做这样的事情?例如在Java中,我可以使用我想要的种子创建两个java.util.Random对象.似乎C++中只有一个全局随机数生成器.我确信有些库提供了这种功能,但无论如何只用C++来实现它?
在TR1(和C++ 0x)中,您可以使用tr1/random标头.它应该内置于现代C++编译器(至少对于g ++和MSVC).
#include <tr1/random>
// use #include <random> on MSVC
#include <iostream>
int main() {
std::tr1::mt19937 m1 (1234); // <-- seed x
std::tr1::mt19937 m2 (5678); // <-- seed y
std::tr1::uniform_int<int> distr(0, 100);
for (int i = 0; i < 20; ++ i) {
std::cout << distr(m1) << "," << distr(m2) << std::endl;
}
return 0;
}
Run Code Online (Sandbox Code Playgroud)