C++ named requirements: RandomNumberDistribution (since C++11)
一个 RandomNumberDistribution 是返回随机数的函数对象,这些随机数遵循 概率密度函数 p(x) 或 离散概率分布 P(x i ) 。
要求
类型
D
满足
RandomNumberDistribution
若
-
D满足 CopyConstructible -
D满足 CopyAssignable
给定
-
T,由 D :: result_type 命名的类型 -
P,由 D :: param_type 命名的类型
-
- 满足 CopyConstructible
- 满足 CopyAssignable
- 满足 EqualityComparable
-
具有与
D的每个构造函数参数完全对应的构造函数 -
具有与
D中每个返回分布参数的成员函数名称、类型和语义完全相同的成员函数 - 声明成员类型别名 using distribution_type = D ;
-
d,类型为D的值 -
x和y,类型为D的(可能为 const)值 -
p,类型为P的(可能为 const)值 -
g、g1、g2,满足 UniformRandomBitGenerator 类型的左值 -
os, std::basic_ostream 特化的左值 -
is, std::basic_istream 特化的左值
以下表达式必须有效并具有其指定效果
| 表达式 | 类型 | 说明 | 复杂度 |
|---|---|---|---|
D::result_type
|
T
|
一个 算术类型 | 编译时 |
D::param_type
|
P
|
编译时 | |
D()
|
创建与任何其他默认构造的
D
无法区分的分布
|
常数 | |
D(p)
|
创建与直接通过构造
p
所用值构造的
D
无法区分的分布
|
与
p
的构造相同
|
|
d.reset()
|
void
|
重置分布的内部状态。对
d
的下一次
operator()
调用将不依赖于
reset()
之前任何引擎生成的值
|
常数 |
x.param()
|
P
|
返回满足
D
(
p
)
.
param
(
)
==
p
的
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
参数的当前值确定的,
x
的
operator()
可能返回值的最小下界
|
常数 |
x.max()
|
T
|
根据
x
参数的当前值确定的,
x
的
operator()
可能返回值的最大上界
|
常数 |
x == y
|
bool
|
建立等价关系。当
x.
param
(
)
==
y.
param
(
)
且只要
g1
==
g2
,通过重复调用
x
(
g1
)
和
y
(
g2
)
生成的未来无限值序列将相等时,返回
true
|
常数 |
x != y
|
bool
|
!(x == y)
|
常数 |
os << x
|
os
类型的引用
|
将分布参数和内部状态的文本表示写入
os
。
os
的格式化标志和填充字符保持不变
|
|
is >> d
|
is
类型的引用
|
使用从
is
读取的数据恢复分布参数和内部状态。
is
的格式化标志保持不变。数据必须使用具有相同区域设置、
CharT
和
Traits
流模板参数的流写入,否则行为未定义。如果遇到错误输入,将调用
is.
setstate
(
std
::
ios
::
failbit
)
,可能抛出
std::ios_base::failure
。此种情况下
d
保持不变
|
注释
分布对象的参数可以通过两种方式修改:永久性修改使用 d. param ( p ) ,或仅在下一次 operator() 调用期间临时修改使用 d ( g,p ) 。
对分布的const成员函数的调用以及 os << d 不会影响通过重复调用 d ( g ) 所产生的数字序列。
标准库
以下标准库组件满足 RandomNumberDistribution
|
(C++11)
|
在范围内均匀生成整数值
(类模板) |
|
(C++11)
|
在范围内均匀生成实数值
(类模板) |
|
(C++11)
|
基于
伯努利分布
生成
bool
值
(类) |
|
(C++11)
|
基于
二项分布
生成整数值
(类模板) |
|
(C++11)
|
基于
负二项分布
生成整数值
(类模板) |
|
(C++11)
|
基于
几何分布
生成整数值
(类模板) |
|
(C++11)
|
基于
泊松分布
生成整数值
(类模板) |
|
(C++11)
|
基于
指数分布
生成实数值
(类模板) |
|
(C++11)
|
基于
伽马分布
生成实数值
(类模板) |
|
(C++11)
|
基于
威布尔分布
生成实数值
(类模板) |
|
(C++11)
|
基于
极值分布
生成实数值
(类模板) |
|
(C++11)
|
基于
标准正态(高斯)分布
生成实数值
(类模板) |
|
(C++11)
|
基于
对数正态分布
生成实数值
(类模板) |
|
(C++11)
|
基于
卡方分布
生成实数值
(类模板) |
|
(C++11)
|
基于
柯西分布
生成实数值
(类模板) |
|
(C++11)
|
基于
F分布
生成实数值
(类模板) |
|
(C++11)
|
基于
t分布
生成实数值
(类模板) |
|
(C++11)
|
基于离散分布生成整数值
(类模板) |
|
(C++11)
|
在常量子区间上生成实数值
(类模板) |
|
(C++11)
|
在定义子区间上生成实数值
(类模板) |