初级启示者
stl-random是C++11的新特**(我的小号之前已经介绍过了thread)
能够生成几乎绝对随机的随机数
现在,我们生成随机数都用:
srand(time(0));
cout<<rand();
...
然而,来一个while输出这样生成的随机数:
还每秒变一下!干脆叫计时器得了
所以C++11提供了一种可以生成近似完全随机数的方式:stl-random
头文件:
#include<random>
定义:
random_device rd; //随机数生成器
生成原理:一些几乎绝对随机的东西(用户键盘敲击间隔、鼠标点击间隔、物理特**等)
使用:
cout << rd() << endl;
没错,直接输出!(这很C++)
不过这样生成的随机数不能通过种子来获取固定的随机数
所以介绍个default_random_engine(种子生成随机数)
定义:
default_random_engine e(seed); //seed:种子
或
default_random_engine e;
e.seed(s); //s:种子
使用:
cout << e() << endl;
如果想用种子生成近似完全随机数,可以将random_device生成的随机数当成种子用
生成int/double型的随机数(需要种子):
定义:
uniform_real_distribution <数据类型> u(最小值, 最大值);
数据类型可以为: int 、long long 、double等,可以自己试试
最小值和最大值规定了生成范围(如果想生成随机数时不用麻烦的取余运算也可以用这个)
使用:
cout << u(e) << endl;
e为上面的随机种子default_random_engine
完~
薛乘志在2021-11-20 09:57:02追加了内容
想了解更多可以看看:
2. 概率、分布和熵及其概述
4. C++随机数生成器(default_random_engine)用法详解
5. C++ uniform_int_distribution离散均匀分布类用法详解
6. C++ uniform_real_distribution连续均匀分布类模板用法详解
7. C++ generate_canonical均匀分布随机数函数用法详解
8. C++ normal_distribution高斯正态分布函数用法详解
9. C++ lognormal_distribution对数分布随机数函数用法详解
10. C++ discrete_distribution离散分布随机数函数用法详解
11. C++ piecewise_constant_distribution分段常数分布随机数用法详解
12. C++ piecewise_linear_distribution分段线**分布随机数用法详解
13. C++ binomial_distribution二项式分布随机数用法解析
15. C++线**同余法生成随机数(linear_congruential_engine)用法详解
16. C++梅森旋转算法生成随机数(mersenne_twister_engine)详解
17. C++带进位的线**同余法(subtract_with_carry_engine)生成随机数详解
薛乘志在2021-11-20 09:58:53追加了内容
薛乘志在2021-11-20 12:06:11追加了内容
@酷町扫地僧 我要申精我要申精我要申精我要申精我要申精