Namespaces
Variants

C++ named requirements: RandomNumberEngine (since C++11)

From cppreference.net
C++ named requirements

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

任何随机数引擎同时也是一个 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 ,如果 x ( ) y ( ) 的第 i 次连续调用返回相同值,则返回 true 。否则返回 false O(n)
x ! = y bool ! ( x == y ) O(n)
os << x decltype ( os ) & 将格式标志设置为 std:: ios_base :: dec | std:: ios_base :: left 且填充字符设置为空格字符,向 os 写入 x 当前状态的文本表示。

后置条件: os 的格式标志和填充字符与之前相同。

O(n)
is >> v decltype ( is ) & 将格式标志设置为 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

标准库

以下标准库设施满足 随机数引擎 要求:

实现 线性同余 算法
(类模板)
实现 梅森旋转 算法
(类模板)
实现带进位减法( 滞后斐波那契 )算法
(类模板)
基于计数器的可并行化生成器
(类模板)
丢弃随机数引擎的部分输出
(类模板)
将随机数引擎的输出打包成指定位数的块
(类模板)
以不同顺序输出随机数引擎的结果
(类模板)

以下标准库设施满足 均匀随机比特生成器 要求但不满足 随机数引擎 要求:

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