c ++ 11 - 随机设备使用

jea*_*ean 9 random c++11

有什么不同

std::random_device rd;
std::mt19937 gen(rd());
std::uniform_int_distribution<int> dist(0, 100);
for (int n = 0; n < 100; ++n)
    std::cout<<dist(gen)<<std::endl; 
Run Code Online (Sandbox Code Playgroud)

std::random_device rd;
std::uniform_int_distribution<int> dist(0, 100);
for (int n = 0; n < 100; ++n)
    std::cout<<dist(rd)<<std::endl; 
Run Code Online (Sandbox Code Playgroud)

第一个例子使用rd()作为种子,但输出类似,我想知道第一个优点是什么.

Pur*_*reW 7

不同之处在于,在第一个示例中,您专门将mersenne-twister设置为随机数生成器.mersenne-twister是一个伪随机生成器,用std :: random_device中的值播种.mersenne-twister被认为是一种非常好的伪随机发生器,可以快速产生大量高质量的伪随机值.

的std :: random_device是因为它使用不同的随机过程产生的数字,实际上是随机的"真"随机数发生器.因此,我认为如果你需要很多随机数非常快,这是不合适的,因为它取决于发生的这些随机事件(想想用户输入,广告测量中的噪声等),以便创建一个随机状态.