C++标准库中将随机数的产生分为了两个部分:随机引擎(engine) 和分布(distriution)。头文件为
随机引擎:是随机数的源头,会随机产生无正负号值,他们被随机均匀的分布在一个预定义最小(min())和最大(max())值之间,需要一个种子。
分布:将随机引擎产生的值转换为随机数,线性或者非线性的分布在其中。
**注意: **引擎是有状态的,当两个一样的引擎,使用同一个种子,并且状态相同时,会产生相同的值。再加上分布之后,依然会是一个相同的值,而不是随机值。所以在放置种子的时候,需要仔细斟酌。
随机引擎的一些基本操作函数:
- engine e; 默认构造函数
- engine e(seed);根据seed形成的状态来建立引擎
- e.seed();将引擎设为初始化状态
- e.seed(seed);将引擎根据seed而形成的状态
- e();返回下一个随机值,并前进其状态;
- e1 == e2;返回"e1 e();返回下一个随机值,并前进其状态;
- e1 != e2; 返回"e1 和e2是否不拥有相同的状态" e1 != e2; 返回"e1 和e2是否不拥有相同的状态"
分布
分布即是把引擎产生的随机值转换为真实而有用的随意数。产生数的概率取决于使用何种分布。
如:均匀分布:
uniform_int_distribution int
uniform