C++ 参考手册
- C++11
- C++14
- C++17
- C++20
- C++ 编译器支持情况表
- 独立与宿主实现
- C++ 语言
- C++ 关键词
- 预处理器
- C++ 标准库头文件
- 具名要求
- C++ 具名要求: 函数对象 (FunctionObject)
- C++ 具名要求: 二元谓词 (BinaryPredicate)
- C++ 具名要求: 可默认构造 (DefaultConstructible)
- C++ 具名要求: 可复制赋值 (CopyAssignable)
- C++ 具名要求: 可复制构造 (CopyConstructible)
- C++ 具名要求: 可移动赋值 (MoveAssignable) (C++11 起)
- C++ 具名要求: 可移动构造 (MoveConstructible) (C++11 起)
- C++ 具名要求: 可析构 (Destructible)
- C++ 具名要求: 可平凡复制 (TriviallyCopyable)
- C++ 具名要求: 可相等比较 (EqualityComparable)
- C++ 具名要求: 可小于比较 (LessThanComparable)
- C++ 具名要求: 比较 (Compare)
- C++ 具名要求: 字面类型 (LiteralType)
- C++ 具名要求: 简旧数据类型 (PODType)
- C++ 具名要求: 平凡类型 (TrivialType)
- C++ 具名要求: 标准布局类型 (StandardLayoutType)
- C++ 具名要求: 遗留向前迭代器 (LegacyForwardIterator)
- C++ 具名要求: 可交换 (Swappable)
- C++ 具名要求: 值可交换 (ValueSwappable)
- C++ 具名要求: 可空指针 (NullablePointer) (C++11 起)
- C++ 具名要求: 散列 (Hash)
- C++ 具名要求: 分配器 (Allocator)
- C++ 具名要求: 可调用 (Callable)
- C++ 具名要求: 谓词 (Predicate)
- C++ 具名要求: 容器 (Container)
- C++ 具名要求: 序列容器 (SequenceContainer)
- C++ 具名要求: 连续容器 (ContiguousContainer)
- C++ 具名要求: 可逆容器 (ReversibleContainer)
- C++ 具名要求: 关联容器 (AssociativeContainer)
- C++ 具名要求: 具分配器容器 (AllocatorAwareContainer)
- C++ 具名要求: 无序关联容器 (UnorderedAssociativeContainer)
- C++ 具名要求: 可默认插入 (DefaultInsertable)
- C++ 具名要求: 可复制插入 (CopyInsertable)
- C++ 具名要求: 可移动插入 (MoveInsertable) (C++11 起)
- C++ 具名要求: 可就位构造 (EmplaceConstructible) (C++11 起)
- C++ 具名要求: 可擦除 (Erasable)
- C++ 具名要求: 遗留迭代器 (LegacyIterator)
- C++ 具名要求: 遗留输出迭代器 (LegacyOutputIterator)
- C++ 具名要求: 遗留输入迭代器 (LegacyInputIterator)
- C++ 具名要求: 遗留双向迭代器 (LegacyBidirectionalIterator)
- C++ 具名要求: 遗留随机访问迭代器 (LegacyRandomAccessIterator)
- C++ 具名要求: 遗留连续迭代器 (LegacyContiguousIterator)
- C++ 具名要求: 常量表达式迭代器 (ConstexprIterator)
- C++ 具名要求: 有格式输入函数 (FormattedInputFunction)
- C++ 具名要求: 无格式输入函数 (UnformattedInputFunction)
- C++ 具名要求: 有格式输出函数 (FormattedOutputFunction)
- C++ 具名要求: 无格式输出函数 (UnformattedOutputFunction)
- C++ 具名要求: 种子序列 (SeedSequence)
- C++ 具名要求: 随机数引擎 (RandomNumberEngine)
- C++ 具名要求: 随机数分布 (RandomNumberDistribution)
- C++ 具名要求: 均匀随机位生成器 (UniformRandomBitGenerator)
- C++ 具名要求: 随机数引擎适配器 (RandomNumberEngineAdaptor)
- C++ 具名要求: 基本可锁定 (BasicLockable)
- C++ 具名要求: 可锁定 (Lockable)
- C++ 具名要求: 可定时锁定 (TimedLockable)
- C++ 具名要求: 互斥体 (Mutex)
- C++ 具名要求: 定时互斥体 (TimedMutex)
- C++ 具名要求: 共享互斥体 (SharedMutex)
- C++ 具名要求: 共享定时互斥体 (SharedTimedMutex)
- C++ 具名要求: 字符特征 (CharTraits)
- C++ 具名要求: 正则表达式特征 (RegexTraits)
- C++ 具名要求: 位掩码类型 (BitmaskType)
- C++ 具名要求: 数值类型 (NumericType)
- C++ 具名要求: 一元类型特征 (UnaryTypeTrait)
- C++ 具名要求: 二元类型特征 (BinaryTypeTrait)
- C++ 具名要求: 变换特征 (TransformationTrait)
- C++ 具名要求: 时钟 (Clock)
- C++ 具名要求: 平凡时钟 (TrivialClock)
- 注释
- 功能特性测试 (C++20)
- 工具库
- 类型支持(基本类型、RTTI、类型特性)
- 概念库 (C++20)
- 错误处理
- 动态内存管理
- 日期和时间工具
- 字符串库
- 容器库
- 迭代器库
- 范围库 (C++20)
- 算法库
- 数值库
- 输入/输出库
- 文件系统库
- 本地化库
- 正则表达式库
- 原子操作库
- 线程支持库
- 实验性 C++ 特性
- 有用的资源
- 索引
- std 符号索引
- 协程支持 (C++20)
- C++ 关键词
C++ 具名要求: 随机数分布 (RandomNumberDistribution)
随机数分布 (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
,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 |
返回 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 的 operator() 潜在返回值上的最大下界,由 x 的参数的当前值确定 |
常数 |
x.max() |
T |
x 的 operator() 潜在返回值上的最小上界,由 x 的参数的当前值确定 |
常数 |
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) 永久更改,或用 d(g,p) 只在单次 operator() 调用期间更改。
调用分布的 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) |
产生 χ2 分布上上的实数值。 (类模板) |
(C++11) |
产生柯西分布上的实数值。 (类模板) |
(C++11) |
产生费舍尔 F 分布上的实数值。 (类模板) |
(C++11) |
产生学生 t 分布上的实数值。 (类模板) |
(C++11) |
产生离散分布上的随机整数。 (类模板) |
产生分布在常子区间上的实数值。 (类模板) | |
产生分布在定义的子区间上的实数值。 (类模板) |