生成两个独立的随机数序列(C++)

Nea*_*eal 6 c++ random

我希望能够做这样的事情(显然不是有效的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++来实现它?

ken*_*ytm 7

在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)