命名空间
变体
操作

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

来自 cppreference.com
 
 
C++ 命名要求
 

随机数生成器是一个函数对象,返回无符号整数值,使得所有可能的返回值(理想情况下)具有相同的概率。

任何随机数生成器也是一个 UniformRandomBitGenerator,因此可以插入任何 随机数分布 以获取随机数(正式来说,是随机变量)。

[编辑] 要求

如果一个类型满足 UniformRandomBitGenerator 并且在给定以下类型和值的情况下,满足下表中的语义和复杂度要求,则它满足 RandomNumberEngine

类型 定义
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() N/A 创建一个引擎,其初始状态与所有其他类型为 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 通过任何等效于 z 次连续调用 e() 的方法,将 e 的状态从 e
i
推进到 e
i+z
不差于 z 次连续调用 e() 的复杂度
x == y bool 对于所有正整数 i,如果 i 次连续调用 x()y() 返回相同的值,则返回 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

使用硬件熵源的非确定性随机数生成器
(类) [编辑]