C++ 命名要求: RandomNumberEngine (自 C++11 起)
来自 cppreference.cn
随机数引擎是一个返回无符号整数值的函数对象,使得可能结果范围内的每个值都(理想情况下)具有相等的概率。
任何随机数引擎也是一个 UniformRandomBitGenerator,因此可以插入任何 随机数分布 中,以获得随机数(正式地,是随机变量)。
[编辑] 要求
如果一个类型满足 RandomNumberEngine,则它必须满足 UniformRandomBitGenerator,并且在给定以下类型和值的情况下,必须满足下表中的语义和复杂性要求
类型 | 定义 |
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 的状态从 ei 推进到 ei+1 (即 TA(ei )) 并返回 GA(ei )。 |
摊销常数 |
e.discard(z) | void | 通过任何等效于连续调用 z 次 e() 的方式,将 e 的状态从 ei 推进到 ei+z 。 |
不比连续调用 z 次 e() 的复杂度更差 |
x == y | bool | 对于所有正整数 i,如果 x() 和 y() 的第 i 次连续调用返回相同的值,则返回 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) |
使用硬件熵源的非确定性随机数生成器 (类) |