std::random_device

< cpp‎ | numeric‎ | random
 
 
数值库
常用数学函数
数学特殊函数 (C++17)
数学常数 (C++20)
浮点环境 (C++11)
复数
数值数组
伪随机数生成
编译时有理数算术 (C++11)
数值算法
(C++17)
(C++17)
插值
(C++20)
(C++20)
通用数值运算
(C++11)
位操作
(C++20)
(C++20)
(C++20)
(C++20)
(C++20)
(C++20)
(C++20)
(C++20)
(C++20)
(C++20)
 
 
 
定义于头文件 <random>
class random_device;
(C++11 起)

std::random_device 是生成非确定随机数的均匀分布整数随机数生成器。

std::random_device 可以以实现定义的伪随机数引擎实现,若非确定源(例如硬件设备)对实现不可用。此情况下每个 std::random_device 对象可生成同一数值序列。

成员类型

 
成员类型 定义
result_type unsigned int

成员函数

构造
构造引擎
(公开成员函数)
operator=
(被删除)
赋值运算符被删除
(公开成员函数)
生成
推进引擎状态并返回生成的值
(公开成员函数)
特征
获得非确定随机数生成器的熵估计
(公开成员函数)
[静态]
获取输出范围中的最小可能值
(公开静态成员函数)
[静态]
获取输出范围中的最大可能值
(公开静态成员函数)

注解

值得注意的 std::random_device 为确定性的实现是 MinGW 的旧版本(漏洞 338 , GCC 9.2 起修复),虽然存在如 mingw-std-random_device 的替换。最新的 MinGW 版本可从 GCC with the MCF thread model 下载。

示例

#include <iostream>
#include <string>
#include <map>
#include <random>
 
int main()
{
    std::random_device rd;
    std::map<int, int> hist;
    std::uniform_int_distribution<int> dist(0, 9);
    for (int n = 0; n < 20000; ++n) {
        ++hist[dist(rd)]; // 注意:仅用于演示:一旦熵池耗尽,
                          // 许多 random_device 实现的性能就急剧下滑
                          // 对于实践使用, random_device 通常仅用于
                          // 播种类似 mt19937 的伪随机数生成器
    }
    for (auto p : hist) {
        std::cout << p.first << " : " << std::string(p.second/100, '*') << '\n';
    }
}

可能的输出:

0 : ********************
1 : *******************
2 : ********************
3 : ********************
4 : ********************
5 : *******************
6 : ********************
7 : ********************
8 : *******************
9 : ********************