概念
自C++11起,标准库中包含了随机数程序库。在学习之前,我们需要明白随机有两方面的含义,一方面是指随机性(值)的源头,另一方面是指随机数的生成机制。通常情况下我们需要一个 引擎 和一个 分布。
引擎
- 随机性的源头
- 产生随机的无正负的值 - 有状态
- 状态决定了它将生成哪一个随机值序列
- 如每次初始化一个引擎,其初始状态是相同的
- 如果需要一个不可预期的随机值,可以传入一个 种子 给引擎构造函数
- 状态的保存与恢复
分布
- 将引擎产生的随机值转换为真实有用的随机数
为什么不直接使用引擎生成的随机值
标准库指出使用 C 标准随机值生成器,并以取余的方式将结果限制在某一区间内时,来自引用文献中有两点原因:许多伪随机数生成器制出来的余数可能并不很随机;某些余数出现率会远高于其它,具体例子见第二个参考链接,即rand()%10000后结果分布并不均匀。
shuffle函数
使用
待补充
参考
《C++标准库》(第二版) 17章
C++的RAND函数生成的值为什么存在严重的不随机性?
C/C++生成固定范围随机数的问题