C++ named requirements: RandomNumberEngine (since C++11)
随机数引擎是一个返回无符号整数值的函数对象,使得可能结果范围内的每个值(理想情况下)具有相等的概率。
任何随机数引擎同时也是一个 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 写入:
|
标准库
以下标准库设施满足 随机数引擎 要求:
|
(C++11)
|
实现
线性同余
算法
(类模板) |
|
(C++11)
|
实现
梅森旋转
算法
(类模板) |
|
(C++11)
|
实现带进位减法(
滞后斐波那契
)算法
(类模板) |
|
(C++26)
|
基于计数器的可并行化生成器
(类模板) |
|
(C++11)
|
丢弃随机数引擎的部分输出
(类模板) |
|
(C++11)
|
将随机数引擎的输出打包成指定位数的块
(类模板) |
|
(C++11)
|
以不同顺序输出随机数引擎的结果
(类模板) |
以下标准库设施满足 均匀随机比特生成器 要求但不满足 随机数引擎 要求:
|
(C++11)
|
使用硬件熵源的非确定性随机数生成器
(类) |