问题标题: 随机数生成 stl-random(C++11)

0
0
已解决
薛乘志
薛乘志
初级启示者
初级启示者

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追加了内容

想了解更多可以看看:

1. 随机数是什么,随机数及其含义

2. 概率、分布和熵及其概述

3. C++ 随机数生成(STL 随机数生成)完全攻略

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二项式分布随机数用法解析

14. C++ 随机数生成器和随机数引擎及其两者间关系解析

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追加了内容

@酷町扫地僧  我要申精我要申精我要申精我要申精我要申精


0
已采纳
侯平仄
侯平仄
新手天翼
新手天翼

std::mt19937 rnd(12345)

 

rand()%3

 

侯平仄在2021-11-20 14:21:05追加了内容

*rnd()%3

0
陈则霖
陈则霖
资深光能
资深光能

int f=rand()%10+1;

随机一个1到10之间的数

 

它不香

0
我要回答