我什么时候使用std :: random_device?

use*_*909 11 c++ random c++11

根据标准,std::random_device工作方式如下:

result_type operator()();

返回:非确定性随机值,均匀分布在min()和之间max().实现定义了如何生成这些值.

并且有几种方法可以使用它.播种引擎:

std::mt19937 eng(std::random_device{}());
Run Code Online (Sandbox Code Playgroud)

作为引擎本身:

std::uniform_int_distribution<> uid(1, 10);
std::cout << dist(dev);
Run Code Online (Sandbox Code Playgroud)

因为它是实现定义的,所以听起来不像说std::seed_seq或者那么强srand(time(nullptr)).我更愿意将它用作种子,作为引擎还是根本不用?

Bil*_*nch 14

一般来说,std::random_device应该是您可以在平台上访问的最真实随机信息的来源.话虽这么说,访问它比慢std::mt19937或不慢.

正确的行为是使用std::random_device种子之类的东西std::mt19937.