一、c++随机数---c++11随机数。

134 阅读2分钟

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;
	}

}