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

来自cppreference.com
< cpp‎ | named req


 
 
C++ 具名要求
 

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

任何随机数引擎亦为均匀随机位生成器 (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
i
递进到 e
i+1
(即 TA(e
i
)
),并返回 GA(e
i
)
均摊常数
e.discard(z) void 以等价于连续调用 ze() 的方式将 e 的状态从 e
i
递进到 e
i+z
不差于连续调用 ze() 的复杂度
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.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)

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