在程序开发过程中,有时我们需要用到随机数,如果自己手写一个随机数容易引用重复,而c++11已经提供了一个生成随机数的库random,并且就可设置随机数的范围和类型,下面我们来学习使用两个最常用的随机数生成函数。
均匀分布 | |
(C++11) | 产生在一个范围上均匀分布的整数值 (类模板) |
(C++11) | 产生在一个范围上均匀分布的实数值 (类模板) |
#include <iostream>
#include <random>
using namespace std;
int main()
{
default_random_engine int_engine; //定义随机数引擎
//定义整型随机数的取值范围
uniform_int_distribution<unsigned int> udistribution(100000, 999999);
unsigned int uRandom = udistribution(int_engine);
cout << "uRandom====================== " << uRandom << endl;
uniform_int_distribution<int> distribution(-999999, -100000);
int random = distribution(int_engine);
cout << "random======================= " << random << endl;
//定义浮点型随机数的取值范围
default_random_engine real_engine; //定义随机数引擎
uniform_real_distribution<double> doubleDistribution(10000.1, 99999.9);
double realRandom = doubleDistribution(real_engine);
cout << "realRandom=================== " << realRandom << endl;
random_device rd; // 将用于获得随机数引擎的种子
mt19937 gen(rd()); // 以 rd() 播种的标准 mersenne_twister_engine
uniform_real_distribution<> dis(10000, 99999);
for (int n = 0; n < 10; ++n) {
// 用 dis 变换 gen 生成的随机 unsigned int 为 [1, 2) 中的 double
std::cout << dis(gen) << ' '; // 每次调用 dis(gen) 都生成新的随机 double
}
cout << endl;
cout << "Hello World!" << endl;
return 0;
}
运行结果:
参考: