std::random_device
来自cppreference.com
定义于头文件 <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 的 PRNG } for (auto p : hist) { std::cout << p.first << " : " << std::string(p.second/100, '*') << '\n'; } }
可能的输出:
0 : ******************** 1 : ******************* 2 : ******************** 3 : ******************** 4 : ******************** 5 : ******************* 6 : ******************** 7 : ******************** 8 : ******************* 9 : ********************