C++ 具名要求:随机数引擎 (RandomNumberEngine) (C++11 起)

来自cppreference.com
< cpp‎ | named req


 
 
C++ 具名要求
 

随机数引擎是返回无符号整数值的函数对象,它使得可能结果范围中的每个值拥有(理想的)相等概率。

任何随机数引擎亦为均匀随机位生成器 (UniformRandomBitGenerator) ,从而可能插入任何随机数分布,以获得随机数(正式而言是随机变量)。

要求

一个类型满足随机数引擎 (RandomNumberEngine) 的条件是,它满足均匀随机位生成器 (UniformRandomBitGenerator) ,并且给定以下类型和值,它也满足下方表格列出的语义和复杂度要求:

类型定义
E随机数引擎 (RandomNumberEngine) 类型
TE::result_type
定义
eE 类型的值
vE 类型左值
x, y(可有 const 限定的)E 类型的值
sT 类型的值
q种子序列 (SeedSequence) 类型左值
zunsigned long long 类型的值
os类型是 std::basic_ostream 的特化的左值
is类型是 std::basic_istream 的特化的左值
nE 的状态的大小
TAE变换算法
GAE生成算法
表达式返回类型语义复杂度
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()Te 的状态从 ei 递进到 ei+1(即 TA(ei)),并返回 GA(ei)均摊常数
e.discard(z)void以等价于连续调用 ze() 的方式将 e 的状态从 ei 递进到 ei+z不差于连续调用 ze() 的复杂度
x == ybool如果对于所有正整数 i,对 x()y() 的连续第 i 次调用都返回相同的值,那么返回 true。否则返回 falseO(n)
x != ybool!(x == y)O(n)
os << xdecltype(os)& 在 fmtflags 设置为 std::ios_base::dec | std::ios_base::left,以及填充字符设置为空格的条件下,将 x 的当前状态的文本表示写入 os

后条件:os 的 fmtflags 和填充字符与之前一致。

O(n)
is >> vdecltype(is)&在 fmtflags 设置为 std::ios_base::dec 的条件下,从 is 读取 v 的当前状态的文本表示。如果输入不正确,那么会确保此操作不更改 v 的状态,并调用 is.setstate(std::ios_base::failbit)(它可能会抛出 std::ios_base::failure)。

前条件:is 提供的文本表示是在之前由满足以下所有条件的输出流 pr 写入的:

  • is.getloc() == pr.getloc()true
  • std::is_same<decltype(is)::char_type,
                 decltype(pr)::char_type>::value
    true
  • std::is_same<decltype(is)::traits_type,
                 decltype(pr)::traits_type>::value
    true

后条件:is 的 fmtflags 与之前一致。

O(n)

标准库

下列标准库设施满足随机数引擎(随机数引擎 (RandomNumberEngine) ):

实现线性同余算法
(类模板)
实现梅森缠绕器算法
(类模板)
实现带进位减(一种延迟斐波那契)算法
(类模板)
基于计数器的可并行化引擎
(类模板)
舍弃随机数引擎的某些输出
(类模板)
打包随机数引擎的输出为指定位数的块
(类模板)
以不同顺序发送一个随机数引擎的输出
(类模板)

下列标准库设施满足均匀随机位生成器 (UniformRandomBitGenerator) 但不满足随机数引擎 (RandomNumberEngine)

使用硬件熵源的非确定随机数生成器
(类)