跳到主要内容

C++ 命名要求:RandomNumberEngine (自 C++11 起)

随机数引擎是一个函数对象,它返回无符号整数值,其中结果范围内每个值的概率(理想情况下)相等。

任何随机数引擎也是一个UniformRandomBitGenerator,因此可以将其插入任何随机数分布中,以获取随机数(形式上,一个随机变量)。

要求

如果给定以下条件,满足UniformRandomBitGenerator的类型E将额外满足RandomNumberEngine

  • TE::result_type指定的类型
  • s,类型为T的值
  • e,类型为E的非 const 值
  • v,类型为E的左值
  • xy,类型为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)voide的状态前进,如同连续调用e()z次。
x == ybool如果xy处于相同状态(以便未来对x()y()的重复调用将产生相同的序列),则为true。否则为false
x != ybool!(x == y)
os << xdecltype(os)&x当前状态的文本表示写入os。在输出中,相邻数字之间用一个或多个空格字符分隔。如果os的fmtflags未设置为ios_base::dec|ios_base::left,则行为可能未定义。
is >> vdecltype(is)&is读取v当前状态的文本表示,以便如果该状态先前通过os << x写入,则x == v。如果is的fmtflags未设置为ios_base::dec,则行为可能未定义。

标准库

以下标准库设施满足RandomNumberEngine

publinear_congruential_engine(C++11)实现线性同余算法
pubmersenne_twister_engine(C++11)实现梅森旋转算法
pubsubtract_with_carry_engine(C++11)实现带借位减法(滞后斐波那契)算法
pubdiscard_block_engine(C++11)丢弃随机数引擎的一些输出
pubindependent_bits_engine(C++11)将随机数引擎的输出打包成指定位数的块
pubshuffle_order_engine(C++11)以不同顺序提供随机数引擎的输出

以下标准库设施满足UniformRandomBitGenerator但不满足RandomNumberEngine

pubrandom_device(C++11)使用硬件熵源的非确定性随机数生成器

C++ 命名要求:RandomNumberEngine (自 C++11 起)

随机数引擎是一个函数对象,它返回无符号整数值,其中结果范围内每个值的概率(理想情况下)相等。

任何随机数引擎也是一个UniformRandomBitGenerator,因此可以将其插入任何随机数分布中,以获取随机数(形式上,一个随机变量)。

要求

如果给定以下条件,满足UniformRandomBitGenerator的类型E将额外满足RandomNumberEngine

  • TE::result_type指定的类型
  • s,类型为T的值
  • e,类型为E的非 const 值
  • v,类型为E的左值
  • xy,类型为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)voide的状态前进,如同连续调用e()z次。
x == ybool如果xy处于相同状态(以便未来对x()y()的重复调用将产生相同的序列),则为true。否则为false
x != ybool!(x == y)
os << xdecltype(os)&x当前状态的文本表示写入os。在输出中,相邻数字之间用一个或多个空格字符分隔。如果os的fmtflags未设置为ios_base::dec|ios_base::left,则行为可能未定义。
is >> vdecltype(is)&is读取v当前状态的文本表示,以便如果该状态先前通过os << x写入,则x == v。如果is的fmtflags未设置为ios_base::dec,则行为可能未定义。

标准库

以下标准库设施满足RandomNumberEngine

publinear_congruential_engine(C++11)实现线性同余算法
pubmersenne_twister_engine(C++11)实现梅森旋转算法
pubsubtract_with_carry_engine(C++11)实现带借位减法(滞后斐波那契)算法
pubdiscard_block_engine(C++11)丢弃随机数引擎的一些输出
pubindependent_bits_engine(C++11)将随机数引擎的输出打包成指定位数的块
pubshuffle_order_engine(C++11)以不同顺序提供随机数引擎的输出

以下标准库设施满足UniformRandomBitGenerator但不满足RandomNumberEngine

pubrandom_device(C++11)使用硬件熵源的非确定性随机数生成器