根据标准,std::random_device
的工作方式如下:
result_type operator()();
返回:非确定性随机值,均匀分布在
min()
和max()
之间。它是实现定义的 如何生成这些值。
有几种方法可以使用它。播种引擎:
std::mt19937 eng(std::random_device{}());
作为一个引擎本身:
std::uniform_int_distribution<> uid(1, 10);
std::cout << dist(dev);
因为它是实现定义的,所以听起来不像说std::seed_seq
或srand(time(nullptr))
那么强。我是否更喜欢将它用作种子,作为引擎还是根本不用?
答案 0 :(得分:14)
一般来说,std::random_device
应该是您可以在平台上访问的最真实随机信息的来源。话虽这么说,访问它比std::mt19937
或更慢。
正确的行为是使用std::random_device
来播种std::mt19937
等内容。