C++ 具名要求:随机数引擎 (RandomNumberEngine) (C++11 起)
来自cppreference.com
随机数引擎是返回无符号整数值的函数对象,它使得可能结果范围中的每个值拥有(理想的)相等概率。
任何随机数引擎亦为均匀随机位生成器 (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() | 不适用 | 创建与所有其他默认构造的 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,对 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) |
使用硬件熵源的非确定随机数生成器 (类) |