C++ 命名要求:RandomNumberEngine (自 C++11 起)
随机数引擎是一个函数对象,它返回无符号整数值,其中结果范围内每个值的概率(理想情况下)相等。
任何随机数引擎也是一个UniformRandomBitGenerator,因此可以将其插入任何随机数分布中,以获取随机数(形式上,一个随机变量)。
要求
如果给定以下条件,满足UniformRandomBitGenerator的类型E
将额外满足RandomNumberEngine:
T
,E::result_type
指定的类型s
,类型为T的值e
,类型为E的非 const 值v
,类型为E的左值x
和y
,类型为E的可能 const 值q
,满足SeedSequence的某种类型的左值z
,无符号长长整型的值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 的状态前进,如同连续调用e() z 次。 |
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
pub | linear_congruential_engine(C++11) | 实现线性同余算法 |
pub | mersenne_twister_engine(C++11) | 实现梅森旋转算法 |
pub | subtract_with_carry_engine(C++11) | 实现带借位减法(滞后斐波那契)算法 |
pub | discard_block_engine(C++11) | 丢弃随机数引擎的一些输出 |
pub | independent_bits_engine(C++11) | 将随机数引擎的输出打包成指定位数的块 |
pub | shuffle_order_engine(C++11) | 以不同顺序提供随机数引擎的输出 |
以下标准库设施满足UniformRandomBitGenerator但不满足RandomNumberEngine
pub | random_device(C++11) | 使用硬件熵源的非确定性随机数生成器 |