命名空间
变体
操作

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

来自 cppreference.cn
 
 
C++ 命名要求
基本
类型属性
全库范围




Container(容器)
容器元素
迭代器 (Iterator)
流 I/O
格式化器
(C++20)
随机数
RandomNumberEngine(随机数引擎)
(C++11)
并发
(C++11)
Ranges
多维视图
其他

 

随机数引擎是一个函数对象,它返回无符号整数值,理想情况下,结果范围内每个值的概率都相等。

任何随机数引擎也是一个 UniformRandomBitGenerator,因此可以将其插入任何 随机数分布 中以获取随机数(形式上,随机变量)。

[编辑] 要求

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

类型 定义
E 一个 RandomNumberEngine 类型
T E::result_type
定义
e 类型 E 的一个值
v 类型 E 的一个左值
x, y 类型 E 的值(可能带有 const 限定符)
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 的状态从 ei 前进到 ei+1(即 TA(ei)),并返回 GA(ei) 均摊常量时间
e.discard(z) void 通过任何等同于连续调用 ze() 的方式,将 e 的状态从 ei 前进到 ei+z 不比连续调用 ze() 的复杂度更差
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

实现 线性同余 算法
(类模板) [编辑]
实现 Mersenne twister 算法
(类模板) [编辑]
实现带借位减法 (滞后斐波那契) 算法
(类模板) [编辑]
基于计数器的可并行化生成器
(类模板) [编辑]
丢弃随机数引擎的一些输出
(类模板) [编辑]
将随机数引擎的输出打包成指定比特数的块
(类模板) [编辑]
以不同顺序提供随机数引擎的输出
(类模板) [编辑]

以下标准库设施满足 UniformRandomBitGenerator 但不满足 RandomNumberEngine

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