天天看点

c++基础版到进阶版(模板函数与类)——随机数整数和小数生成的几种方法

一、基础版,适合编程基础较薄弱的人

1、无取值范围的伪随机数的生成,每次生成的数都不变。代码如下:

#include "pch.h"
#include <iostream>
#include<random>
using namespace std;
int main()
{
	int a;
	for (int i = 0; i < 10; i++)
	{
		a = rand();
		cout << a << endl;
	}
}
           

两次运行结果一样:

c++基础版到进阶版(模板函数与类)——随机数整数和小数生成的几种方法
c++基础版到进阶版(模板函数与类)——随机数整数和小数生成的几种方法

2、无取值范围真随机生成方法,利用c++时间库函数,srand(time(0))代表随计算机时间改变的随机种子。代码如下:

#include "pch.h"
#include <iostream>
#include <ctime> // 时间库
using namespace std;
int main()
{
	int a;
	srand(time(0));
	for (int i = 0; i < 10; i++)
	{
		a = rand();
		cout << a << endl;
	}
}
           

两次运行结果不一样:

c++基础版到进阶版(模板函数与类)——随机数整数和小数生成的几种方法
c++基础版到进阶版(模板函数与类)——随机数整数和小数生成的几种方法

3、有取值范围真随机生成方法1,利用c++时间库#include <ctime>和随机库函数#include<random>可以生成有范围的随机小数和整数。代码如下:

#include "pch.h"
#include <iostream>
#include <ctime> // 时间库
#include<random>
using namespace std;
int main()
{
	srand((unsigned)time(NULL));             //设置时间随机种子
	default_random_engine a(rand());          //为【引擎】,生成随机序列
	uniform_real_distribution<double> r1(0, 1);  //设置随机数小数范围
	uniform_int_distribution<unsigned> r2(0, 10000);  //设置随机数整数范围
	for (int i = 0; i < 10; i++)
	{
		cout << r1(a) <<"、"<<r2(a)<<endl;
	}
}
           

两次运行结果不一样:

c++基础版到进阶版(模板函数与类)——随机数整数和小数生成的几种方法
c++基础版到进阶版(模板函数与类)——随机数整数和小数生成的几种方法

二、进阶版,适合基础较好,对函数模板以及类比较熟悉的人

4、有取值范围真随机生成方法2,利用c++时间库#include <ctime>和随机库函数#include<random>生成有范围的随机小数和整数时看,当我们编写由很多子函数组成的程序时,会发现代码重复率比较高,此时我们就考虑利用函数模板。代码如下:

#include "pch.h"
#include <iostream>
#include <ctime> // 时间库
#include<random>
using namespace std;
template<typename T>
T randT(T Lower, T Upper)//产生任意类型随机数模板函数
{
	return rand() / (double)RAND_MAX *(Upper - Lower) + Lower;
};
int main()
{
	int d3 = 10, d4 = 10000;
	double d1 = 0, d2 = 1.0;
	srand((unsigned)time(NULL));             //设置时间随机种子
	for (int i = 0; i < 10; i++)
	{
		cout << randT(d1,d2) <<"、"<< randT(d3, d4) <<endl;
	}
}
           

两次运行结果不一样:

c++基础版到进阶版(模板函数与类)——随机数整数和小数生成的几种方法
c++基础版到进阶版(模板函数与类)——随机数整数和小数生成的几种方法

5、有取值范围真随机生成方法2,利用c++时间库#include <ctime>和随机库函数#include<random>生成有范围的随机小数和整数时看,当我们编写由很多子函数组成的程序时,会发现代码重复率比较高,此时我们就考虑利用类。代码如下:

#include "pch.h"
#include <iostream>
#include <ctime> // 时间库
#include<random>
using namespace std;
class RandomNumber {
public:
	RandomNumber() {
		srand(time(0));//设置时间随机种子
	}
	int integer(int begin, int end) //定义随机整数函数
	{
		return rand() % (end - begin + 1) + begin;
	}
	double decimal(double a, double b) //定义随机小数函数
	{
		return double(rand() % 10000) / 10000 * (b - a) + a;
	}
};
int main()
{
	RandomNumber r;       //随机数
	for (int i = 0; i < 10; i++)
	{
		cout << r.integer(0,10000) <<"、"<< r.decimal(0, 1) <<endl;
	}
}
           

两次运行结果不一样:

c++基础版到进阶版(模板函数与类)——随机数整数和小数生成的几种方法
c++基础版到进阶版(模板函数与类)——随机数整数和小数生成的几种方法

好啦,以上就是随机数生成的几种办法,亲测很好用,如果有什么问题或者需要交流的请发邮箱[email protected]联系我!

继续阅读