1、使用c++11随机数的原因:因为c中的随机数质量较差,并不能满足一些随机要求。
2、知识点:
a、std::random_device rd; 称为随机设备:可以通过操作系统获得随机种子值。
b、std::default_random_engine engine(seed); 称为随机数产生器,可以通过使用随机种子,用某种算法产生随机值。c++内置了多种随机数产生算法,可供选择。
c、std::uniform_int_distribution distribution1(5, 8); 称为随机值概率分布类,可以使用概率类,让随机值符合某些特征,比如均匀分布,比如二项分布等,c++内置多种概率分布类,可供选择。
d、int c = distribution1(engine); 使用随机分布类的仿函数,随机生成器为参数,产生随机值。
参考文章:C++11 內建亂數函式庫使用教學:隨機亂數產生器與機率分布 – G. T. Wang (gtwang.org)
#include<iostream>
#include<random>
using namespace std;
int main()
{
//随机设备: 可以通过操作系统获取一个随机种子数。
std::random_device rd;
//生成一个随机种子
unsigned int seed = rd();
//随机引擎(也叫随机数产生器):表示产生随机数的算法,可以选择多种c++内置的随机数产生的算法。
std::default_random_engine engine(seed);
//概率分布类:比如随机值均匀分布,比如随机值二项分布,c++内置多种概率分布类可以选择。
//注意:以下两个分布类仿函数参数,是最小值和最大值。 但是其他分布类仿函数参数,不一定是最小最大值
std::uniform_int_distribution<int> distribution1(5, 8);
std::uniform_real_distribution<double> distribution2(5.0, 8.0);
//通过使用概率分布类的仿函数,一级随机引擎,产生随机数。
for (int i = 0; i < 100; i++)
{
int c = distribution1(engine);
double d = distribution2(engine);
cout << c << ":" << d << endl;
}
}