C++ 何时使用std::random_设备?
根据标准,C++ 何时使用std::random_设备?,c++,c++11,random,C++,C++11,Random,根据标准,std::random_设备的工作方式如下: 结果类型运算符() 返回:非确定性随机值,均匀分布在min()和max()之间。它是实现定义的 这些值是如何生成的 有几种方法可以使用它。要为发动机播种,请执行以下操作: std::mt19937 eng(std::random_device{}()); 作为发动机本身: std::uniform_int_distribution<> uid(1, 10); std::cout << dist(dev); std
std::random_设备
的工作方式如下:
结果类型运算符()代码>
返回:非确定性随机值,均匀分布在min()
和max()
之间。它是实现定义的
这些值是如何生成的
有几种方法可以使用它。要为发动机播种,请执行以下操作:
std::mt19937 eng(std::random_device{}());
作为发动机本身:
std::uniform_int_distribution<> uid(1, 10);
std::cout << dist(dev);
std::统一内部分发uid(1,10);
std::cout一般来说,std::random_设备
应该是您可以在平台上访问的最真实的随机信息的来源。这就是说,访问它要比std::mt19937慢得多
正确的行为是使用std::random_device
来播种类似std::mt19937
的内容。不幸的是,您必须小心。例如,.我会选择第一个选项,但这也取决于你想要为它播种的引擎的质量。它很可能比那些加密不强的技术更强大。例如,Visual C++可以使用。在没有指定编译器/平台的情况下,我怀疑你会得到一个有意义的答案。否则最好的答案是检查编译器的文档。因此,如果您的实现使用/dev/random
而不是/dev/urandom
,调用可能会阻塞,直到您补充熵池,这可能意味着您将花费大量时间晃动鼠标:)如果我没有弄错的话,std::random\u设备
如果您试图从中获取大量数字,可能会耗尽熵。这可能会导致它阻塞,直到你移动鼠标或其他东西。应该是,但有时不是。看见