命名空间
变体
操作

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

来自 cppreference.com
 
 
C++ 命名需求
 

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

[编辑] 要求

如果类型 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 重置分布的内部状态。对 doperator() 的下一次调用将不依赖于 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 x 的参数的当前值决定的,xoperator() 可能返回的值的最小上限。 常量
x.max() T x 的参数的当前值决定的,xoperator() 可能返回的值的最大上限。 常量
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() 调用期间更改。

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

[编辑] 标准库

以下标准库组件满足 RandomNumberDistribution

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