跳到主要内容

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

一个 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,类型为 D 的值
  • xy,类型为 D 的(可能为 const)值
  • p,类型为 P 的(可能为 const)值
  • g, g1, g2,满足 UniformRandomBitGenerator 的类型的左值
  • osstd::basic_ostream 特化类型的左值
  • isstd::basic_istream 特化类型的左值

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

表达式类型备注复杂度
D::result_typeT算术类型编译时
D::param_typeP编译时
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()Tx 的 operator() 可能返回的值的最小下界,由 x 的参数当前值确定常量
x.max()Tx 的 operator() 可能返回的值的最大上界,由 x 的参数当前值确定常量
x == ybool建立等价关系。如果 x.param() == y.param() 并且只要 g1 == g2,重复调用 x(g1)y(g2) 将生成的未来无限值序列相等,则返回 true。常量
x != ybool!(x == y)常量
os << xos 类型的引用将分布参数和内部状态的文本表示写入 osos 的格式标志和填充字符保持不变。
is >> dis 类型的引用is 读取数据以恢复分布参数和内部状态。is 的格式标志保持不变。数据必须使用具有相同区域设置、CharT 和 Traits 流模板参数的流写入,否则行为未定义。如果遇到不良输入,则调用 is.setstate(std::ios::failbit),这可能会抛出 std::ios_base::failure。在这种情况下,d 保持不变。

备注

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

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

标准库

以下标准库组件满足 RandomNumberDistribution

pubuniform_int_distribution(C++11)在给定范围内均匀分布生成整数值
pubuniform_real_distribution(C++11)在给定范围内均匀分布生成实数值
pubbernoulli_distribution(C++11)根据伯努利分布生成布尔值
pubbinomial_distribution(C++11)根据二项分布生成整数值
pubnegative_binomial_distribution(C++11)根据负二项分布生成整数值
pubgeometric_distribution(C++11)根据几何分布生成整数值
pubpoisson_distribution(C++11)根据泊松分布生成整数值
pubexponential_distribution(C++11)根据指数分布生成实数值
pubgamma_distribution(C++11)根据伽马分布生成实数值
pubweibull_distribution(C++11)根据威布尔分布生成实数值
pubextreme_value_distribution(C++11)根据极值分布生成实数值
pubnormal_distribution(C++11)根据标准正态(高斯)分布生成实数值
publognormal_distribution(C++11)根据对数正态分布生成实数值
pubchi_squared_distribution(C++11)根据卡方分布生成实数值
pubcauchy_distribution(C++11)根据柯西分布生成实数值
pubfisher_f_distribution(C++11)根据费舍尔F分布生成实数值
pubstudent_t_distribution(C++11)根据学生t分布生成实数值
pubdiscrete_distribution(C++11)在离散分布上生成随机整数
pubpiecewise_constant_distribution(C++11)在常量子区间上生成实数值
pubpiecewise_linear_distribution(C++11)在定义的子区间上生成实数值

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

一个 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,类型为 D 的值
  • xy,类型为 D 的(可能为 const)值
  • p,类型为 P 的(可能为 const)值
  • g, g1, g2,满足 UniformRandomBitGenerator 的类型的左值
  • osstd::basic_ostream 特化类型的左值
  • isstd::basic_istream 特化类型的左值

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

表达式类型备注复杂度
D::result_typeT算术类型编译时
D::param_typeP编译时
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()Tx 的 operator() 可能返回的值的最小下界,由 x 的参数当前值确定常量
x.max()Tx 的 operator() 可能返回的值的最大上界,由 x 的参数当前值确定常量
x == ybool建立等价关系。如果 x.param() == y.param() 并且只要 g1 == g2,重复调用 x(g1)y(g2) 将生成的未来无限值序列相等,则返回 true。常量
x != ybool!(x == y)常量
os << xos 类型的引用将分布参数和内部状态的文本表示写入 osos 的格式标志和填充字符保持不变。
is >> dis 类型的引用is 读取数据以恢复分布参数和内部状态。is 的格式标志保持不变。数据必须使用具有相同区域设置、CharT 和 Traits 流模板参数的流写入,否则行为未定义。如果遇到不良输入,则调用 is.setstate(std::ios::failbit),这可能会抛出 std::ios_base::failure。在这种情况下,d 保持不变。

备注

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

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

标准库

以下标准库组件满足 RandomNumberDistribution

pubuniform_int_distribution(C++11)在给定范围内均匀分布生成整数值
pubuniform_real_distribution(C++11)在给定范围内均匀分布生成实数值
pubbernoulli_distribution(C++11)根据伯努利分布生成布尔值
pubbinomial_distribution(C++11)根据二项分布生成整数值
pubnegative_binomial_distribution(C++11)根据负二项分布生成整数值
pubgeometric_distribution(C++11)根据几何分布生成整数值
pubpoisson_distribution(C++11)根据泊松分布生成整数值
pubexponential_distribution(C++11)根据指数分布生成实数值
pubgamma_distribution(C++11)根据伽马分布生成实数值
pubweibull_distribution(C++11)根据威布尔分布生成实数值
pubextreme_value_distribution(C++11)根据极值分布生成实数值
pubnormal_distribution(C++11)根据标准正态(高斯)分布生成实数值
publognormal_distribution(C++11)根据对数正态分布生成实数值
pubchi_squared_distribution(C++11)根据卡方分布生成实数值
pubcauchy_distribution(C++11)根据柯西分布生成实数值
pubfisher_f_distribution(C++11)根据费舍尔F分布生成实数值
pubstudent_t_distribution(C++11)根据学生t分布生成实数值
pubdiscrete_distribution(C++11)在离散分布上生成随机整数
pubpiecewise_constant_distribution(C++11)在常量子区间上生成实数值
pubpiecewise_linear_distribution(C++11)在定义的子区间上生成实数值