C++ 命名要求: RandomNumberEngine (自 C++11 起)
来自 cppreference.com
随机数生成器是一个函数对象,返回无符号整数值,使得所有可能的返回值(理想情况下)具有相同的概率。
任何随机数生成器也是一个 UniformRandomBitGenerator,因此可以插入任何 随机数分布 以获取随机数(正式来说,是随机变量)。
[编辑] 要求
如果一个类型满足 UniformRandomBitGenerator 并且在给定以下类型和值的情况下,满足下表中的语义和复杂度要求,则它满足 RandomNumberEngine。
类型 | 定义 |
E
|
一个 RandomNumberEngine 类型 |
T
|
E::result_type
|
值 | 定义 |
e | 一个类型为 E 的值 |
v | 一个类型为 E 的左值 |
x, y | 类型为(可能是 const 限定的)E 的值 |
s | 一个类型为 T 的值 |
q | 一个 SeedSequence 左值 |
z | 一个类型为 unsigned long long 的值 |
os | 一个左值,其类型是 std::basic_ostream 的特化 |
is | 一个左值,其类型是 std::basic_istream 的特化 |
n | E 的状态的 大小 |
TA | E 的 转换算法 |
GA | E 的 生成算法 |
表达式 | 返回类型 | 语义 | 复杂度 |
---|---|---|---|
E() | N/A | 创建一个引擎,其初始状态与所有其他类型为 E 的默认构造的引擎相同。 |
O(n) |
E(x) | 创建一个与 x 相等的引擎。 | O(n) | |
E(s) | 创建一个引擎,其初始状态由 s 决定。 | O(n) | |
E(q) | 创建一个引擎,其初始状态由对 q.generate 的一次调用决定。 |
与对长度为 n 的序列调用 q.generate 的复杂度相同 | |
e.seed() | void | 后置条件:e == E(). | 与 E() 相同 |
e.seed(s) | void | 后置条件:e == E(s). | 与 E(s) 相同 |
e.seed(q) | void | 后置条件:e == E(q). | 与 E(q) 相同 |
e() | T
|
将 e 的状态从 e 推进到 e (即 TA(ei ))并返回 GA(ei ). |
摊销常数 |
e.discard(z) | void | 通过任何等效于 z 次连续调用 e() 的方法,将 e 的状态从 e 推进到 e 。 |
不差于 z 次连续调用 e() 的复杂度 |
x == y | bool | 对于所有正整数 i,如果 i 次连续调用 x() 和 y() 返回相同的值,则返回 true。否则返回 false. | O(n) |
x != y | bool | !(x == y) | O(n) |
os << x | decltype(os)& | 使用 fmtflags 设置为 std::ios_base::dec | std::ios_base::left 并将填充字符设置为空格字符,将 x 的当前状态的文本表示形式写入 os。 后置条件:os 的 fmtflags 和填充字符与之前相同。 |
O(n) |
is >> v | decltype(is)& | 使用 fmtflags 设置为 std::ios_base::dec,从 is 中读取 v 的当前状态的文本表示形式。如果遇到错误的输入,确保操作不会改变 v 的状态,并调用 is.setstate(std::ios_base::failbit)(这可能会抛出 std::ios_base::failure)。 前提条件:is 提供一个文本表示形式,该表示形式之前使用满足以下所有条件的输出流 pr 编写
后置条件: is 的 fmtflags 与之前相同。 |
O(n) |
[编辑] 标准库
以下标准库设施满足 RandomNumberEngine
(C++11) |
实现 线性同余 算法 (类模板) |
(C++11) |
实现 梅森旋转器 算法 (类模板) |
(C++11) |
实现带进位减法 (滞后斐波那契) 算法 (类模板) |
(C++26) |
基于计数器的可并行化生成器 (类模板) |
(C++11) |
丢弃随机数引擎的某些输出 (类模板) |
(C++11) |
将随机数引擎的输出打包到指定位数的块中 (类模板) |
(C++11) |
以不同的顺序提供随机数引擎的输出 (类模板) |
以下标准库设施满足 UniformRandomBitGenerator 但不满足 RandomNumberEngine
(C++11) |
使用硬件熵源的非确定性随机数生成器 (类) |