random_device 类

从外部设备生成随机序列。

语法

class random_device {
public:
   typedef unsigned int result_type;

   // constructor
   explicit random_device(const std::string& token = "");

   // properties
   static result_type min();
   static result_type max();
   double entropy() const;

   // generate
   result_type operator()();

   // no-copy functions
   random_device(const random_device&) = delete;
   void operator=(const random_device&) = delete;
   };

成员

random_device
entropy
random_device::operator()

备注

该类描述了随机数的源,按 ISO C++ 标准,允许但不要求它为非确定性的或进行安全加密。 在 Visual Studio 实现中,产生的值是非确定性的且进行了安全加密,但是比从引擎和引擎适配器中创建的生成器运行得更慢(例如,对于大多数应用程序而言,会选择高质量且快速的引擎 mersenne_twister_engine)。

random_device 结果均匀分布在闭合范围 [0, 232) 中。

无法保证 random_device 产生非阻止调用。

通常,random_device 用于设定使用引擎或引擎适配器创建的其他生成器的种子。 有关详细信息,请参阅 <random>

示例

以下代码演示了此类的基本功能和示例结果。 由于 random_device 的非确定性本质,输出部分中所示的随机值将不会与你的结果相匹配。 这是正常情况,也是预期的情况。

// random_device_engine.cpp
// cl.exe /W4 /nologo /EHsc /MTd
#include <random>
#include <iostream>
using namespace std;

int main()
{
    random_device gen;

    cout << "entropy == " << gen.entropy() << endl;
    cout << "min == " << gen.min() << endl;
    cout << "max == " << gen.max() << endl;

    cout << "a random value == " << gen() << endl;
    cout << "a random value == " << gen() << endl;
    cout << "a random value == " << gen() << endl;
}
entropy == 32
min == 0
max == 4294967295
a random value == 2378414971
a random value == 3633694716
a random value == 213725214

这是简化的示例,不代表此生成器的一般使用案例。 有关更具代表性的代码示例,请参阅 <random>

要求

标头:<random>

命名空间: std

random_device::random_device

构造生成器。

random_device(const std::string& = "");

注解

构造函数将按需初始化生成器,从而忽略字符串参数。 如果无法初始化 random_device,将引发派生自 exception 的实现定义的类型的值。

random_device::entropy

估计源的随机性。

double entropy() const noexcept;

备注

成员函数将返回源的随机性的估计(以位为单位)。

random_device::operator()

返回随机值。

result_type operator()();

备注

返回由成员函数 min()max() 确定的在闭区间 [min, max] 中均匀分布的值。 如果无法获取随机数,将引发派生自 exception 的实现定义的类型的值。

另请参阅

<random>