随机数生类定义在头文件random中
C++中的随机数生成采用两个类来解决,随机数引擎类和随机数分布类。一个随机数引擎类生成一个随机数序列,一个分布类使用随机数引擎类的序列生成指定类型、范围、服从特定概率的随机数。
1.随机数引擎类:default_random_engine
随机数引擎生成一个随机数序列
default_random_engine e;//随机数引擎
for (int i = 0; i < 10;i++)
{
cout << e() << endl;//输出随机数引擎生成的徐序列中的前十个数
}
随机数引擎常用操作:
2.随机数发生器
随机数发生器是将随机数引擎和随机数分布配合使用而得到的生成随机数的方法。
生成0-9的随机数发生器
efault_random_engine e;
uniform_int_distribution<unsigned> u(0, 9);//随机数分布类对象u,规定范围为(0,9),类型为unsigned;
for (int i = 0; i < 10;i++)
{
cout << u(e) << endl;
}
上述的u(e)生成随机数的类型和范围在随机数分布类对象定义时指定,请e生成的随机数序列的前十个输出。
注意:上述程序每次调用生成的十个随机数是相同的!!!
因为给定的随机数引擎对象生成的随机数序列是相同的,因此每次调用上述程序生成的随机数将是同一个序列的前十个。如果想要每次调用程序生成的随机数序列不同,那么需要对引擎设置种子。
3.随机数引擎种子
所谓随机数种子其实是在随机数引擎给定的序列的新位置开始生成随机数,而新的位置将由给定的种子决定。设置随机数种子有两种方式,一种是声明对象是提供种子,另一种则是调用seed()函数设置种子。
static default_random_engine e1(1455264);
static default_random_engine e2;
e2.seed(5464456);
但是给定的种子生成的随机数将会是相同,因此,我们可以设置每次运行的程序的种子不同。
我们调用系统函数time() (精确到秒)获取的系统时间作为种子,这样每次的种子将会是不同的,time函数定义在头文件ctime中.
4.随机数生成案例
0-9的随机数
static default_random_engine e(time(0));
static uniform_int_distribution<unsigned> u(0, 9);//随机数分布类对象u,规定范围为(0,9),类型为unsigned;
for (int i = 0; i < 10;i++)
{
cout << u(e) << endl;
}
生成0-1的随机浮点数数
static default_random_engine e(time(0));
static uniform_real_distribution<double> u(0, 1);//随机数分布类对象u,规定范围为(0,9),类型为unsigned;
for (int i = 0; i < 10;i++)
{
cout << u(e) << endl;
}
注意:
生成整形数据时用的随机数分布对象为uniform_int_distribution
生成浮点型数据时用的随机数分布对象为uniform_real_distribution