std::random_device
来自cppreference.com
<tbody>
</tbody>
| 在标头 <random> 定义
|
||
class random_device; |
(C++11 起) | |
std::random_device 是生成非确定随机数的均匀分布整数随机数生成器。
std::random_device 可以以实现定义的伪随机数引擎实现,若非确定源(例如硬件设备)对实现不可用。此情况下每个 std::random_device 对象可生成同一数值序列。
成员类型
| 成员类型 | 定义 |
result_type (C++11)
|
unsigned int
|
成员函数
构造 | |
| 构造引擎 (公开成员函数) | |
operator= (弃置) (C++11) |
赋值运算符被弃置 (公开成员函数) |
生成 | |
| 推进引擎状态并返回生成的值 (公开成员函数) | |
特征 | |
(C++11) |
获得非确定随机数生成器的熵估计 (公开成员函数) |
[静态] |
获取输出范围中的最小可能值 (公开静态成员函数) |
[静态] |
获取输出范围中的最大可能值 (公开静态成员函数) |
注解
在 MinGW-w64 的旧版本中,std::random_device 为确定性的实现(漏洞 338,GCC 9.2 起修复)。最新的 MinGW-w64 可从 GCC with the MCF thread model 下载。
示例
运行此代码
#include <iostream>
#include <map>
#include <random>
#include <string>
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 [x, y] : hist)
std::cout << x << " : " << std::string(y / 100, '*') << '\n';
}
可能的输出:
0 : ********************
1 : *******************
2 : ********************
3 : ********************
4 : ********************
5 : *******************
6 : ********************
7 : ********************
8 : *******************
9 : ********************