命名空间
变体
操作

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

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

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() 并且由重复调用 x(g1)y(g2) 生成的未来无限值序列将相等(只要 g1 == 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) 永久更改分布对象的参数,或者仅通过使用 d(g,p) 在单个 operator() 调用的持续时间内更改。

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

[编辑] 标准库

以下标准库组件满足 RandomNumberDistribution

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