C++ 具名要求:随机数引擎 (RandomNumberEngine)
来自cppreference.com
随机数引擎是函数对象,返回无符号整数值,它使得可能结果范围中的每个值拥有(理想的)相等概率。
任何随机数引擎亦为均匀随机位生成器 (UniformRandomBitGenerator) ,从而可能插入任何随机数分布,以获得随机数(正式而言是随机变量)。
要求
满足均匀随机位生成器 (UniformRandomBitGenerator) 的类型 E
会另外满足随机数引擎 (随机数引擎 (RandomNumberEngine) ) ,若给定
-
T
,E::result_type
所指名的类型 -
s
,T
类型值 -
e
,E
类型的非 const 值 -
v
,E
类型左值 -
x
与y
,E
类型的可能为 const 的值 -
q
,某满足种子序列 (SeedSequence) 的类型的左值 -
z
,unsigned long long
类型值 -
os
,输出流 -
is
,输入流
而下列表达式合法并拥有其指定的效果:
表达式 | 返回类型 | 要求 |
---|---|---|
E() | 创建引擎,其状态与所有其他默认构造的 E 类型引擎相同。
| |
E(x) | 创建引擎,其状态与 x 的相同。
| |
E(s) | 创建引擎,其初始状态为 s 所确定。
| |
E(q) | 创建引擎,其初始状态以单次调用 q.generate 确定。
| |
e.seed() | void
|
设置 e == E() 。 |
e.seed(s) | void
|
设置 e == E(s) 。 |
e.seed(q) | void
|
设置 e == E(q) 。 |
e() | T
|
返回闭区间 [E::min(), E::max()] 中的值。拥有均摊常数复杂度。 |
e.discard(z) | void
|
令 e 的状态前进,如同通过 z 次连续调用 e() 。
|
x == y | bool
|
若 x 与 y 在相同状态(满足将来对 x() 和 y() 的重复调用将产生等同的数列)则为 true 。否则为 false 。
|
x != y | bool
|
!(x == y) |
os << x | decltype(os)& | 将 x 当前状态的文本表示写入 os 。输出中,相邻的数以一或多个空格字符分隔。若 os 的 fmtflags 未设为 ios_base::dec|ios_base::left ,则行为可能未定义。
|
is >> v | decltype(is)& | 从 is 读取 v 当前状态的文本表示,满足若先前通过 os << x 写入该状态,则 x == v 。若 is 的 fmtflags 未设为 ios_base::dec ,则行为可能未定义。
|
标准库
下列标准库设施满足随机数引擎 (随机数引擎 (RandomNumberEngine) ) :
(C++11) |
实现线性同余算法 (类模板) |
(C++11) |
实现梅森缠绕器算法 (类模板) |
(C++11) |
实现带进位减(一种延迟斐波那契)算法 (类模板) |
(C++11) |
舍弃随机数引擎的某些输出 (类模板) |
(C++11) |
将一个随机数引擎的输出打包为指定位数的块 (类模板) |
(C++11) |
以不同顺序发送一个随机数引擎的输出 (类模板) |
下列标准库设施满足均匀随机位生成器 (UniformRandomBitGenerator) 但不满足随机数引擎 (随机数引擎 (RandomNumberEngine) ) :
(C++11) |
使用硬件熵源的非确定随机数生成器 (类) |