命名空间
变体
操作

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

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




Container(容器)
容器元素
迭代器 (Iterator)
流 I/O
格式化器
随机数
RandomNumberDistribution(随机数分布)
(C++11)
并发
Ranges(范围)
多维视图
其他

 

一个 RandomNumberDistribution 是一个函数对象,根据概率密度函数 p(x)离散概率分布 P(xi) 返回随机数。

[编辑] 要求

类型 D 满足 RandomNumberDistribution,如果

给定

  • T,由 D::result_type 命名的类型
  • P,由 D::param_type 命名的类型,它
  • 满足 CopyConstructible
  • 满足 CopyAssignable
  • 满足 EqualityComparable
  • 具有与 D 的每个构造函数(接受对应于分布参数的参数)相同的构造函数。
  • 具有与 D 的每个返回分布参数的成员函数相同的名称、类型和语义的成员函数
  • 声明一个成员 typedef using distribution_type = D;

以下表达式必须有效并具有其指定的效果

表达式 类型 注意 复杂度
D::result_type T 一个算术类型 编译时
D::param_type P 编译时
D() 创建一个与任何其他默认构造的 D 无法区分的分布 常量
D(p) 创建一个与直接从用于构造 p 的值构造的 D 无法区分的分布 p 的构造相同
d.reset() void 重置分布的内部状态。对 d 的下一次 operator() 调用将不依赖于 reset() 之前任何引擎产生的值 常量
x.param() P 返回 p,使得 D(p).param() == p 不比 D(p)
d.param(p) void 后置条件: d.param() == p 不比 D(p)
d(g) T 使用相同 g 连续调用此函数所返回的数字序列,按照 d.param() 参数化的分布随机分布 g 的平摊常数次调用
d(g,p) T 使用相同 g 连续调用此函数所返回的数字序列,按照 p 参数化的分布随机分布 g 的平摊常数次调用
x.min() T xoperator() 可能返回的值的最大下界,由 x 参数的当前值决定 常量
x.max() T xoperator() 可能返回的值的最小上界,由 x 参数的当前值决定 常量
x == y bool 建立等价关系。如果 x.param() == y.param() 并且只要 g1 == g2,重复调用 x(g1)y(g2) 将生成的未来无限值序列相等,则返回 true 常量
x != y bool !(x == y) 常量
os << x os 类型的引用 将分布参数和内部状态的文本表示写入 osos 的格式标志和填充字符保持不变
is >> d is 类型的引用 is 读取数据以恢复分布参数和内部状态。is 的格式标志保持不变。数据必须使用具有相同区域设置、CharTTraits 流模板参数的流写入,否则行为未定义。如果遇到错误输入,则调用 is.setstate(std::ios::failbit),这可能会抛出 std::ios_base::failure。在这种情况下,d 保持不变

[编辑] 注意

分布对象的参数可以通过使用 d.param(p) 永久更改,或者仅在单次 operator() 调用期间通过使用 d(g,p) 更改。

对分布的 const 成员函数和 os << d 的调用不会影响重复调用 d(g) 产生的数字序列。

[编辑] 标准库

以下标准库组件满足 RandomNumberDistribution

产生在给定范围内均匀分布的整数值
(类模板) [编辑]
产生在给定范围内均匀分布的实数值
(类模板) [编辑]
伯努利分布上产生 bool
(类)
根据 二项分布 生成整数值
(类模板)
根据 负二项分布 生成整数值
(类模板)
根据 几何分布 生成整数值
(类模板)
泊松分布上产生整数值
(类模板)
根据 指数分布 生成实数值
(类模板)
根据 伽马分布 生成实数值
(类模板)
根据 威布尔分布 生成实数值
(类模板)
根据 极值分布 生成实数值
(类模板)
根据 标准正态(高斯)分布 生成实数值
(类模板)
根据 对数正态分布 生成实数值
(类模板)
根据 卡方分布 生成实数值
(类模板)
根据 柯西分布 生成实数值
(类模板)
根据 Fisher's F-分布 生成实数值
(类模板)
根据 Student's t-分布 生成实数值
(类模板)
在离散分布上产生随机整数
(类模板)
在常数子区间上生成分布的实数值
(类模板)
在定义子区间上生成分布的实数值
(类模板)