C++随机数(default_random_engine)

C++11之前生成随机数

**1.**仅使用rand()生成随机数不需要引入特定头文件直接使用即可。

  如 `int i=rand();`  

但是生成随机数的种子默认是1 随机数范围是0到rand_max(int型是32767)

**2.**使用种子来使每次生成的随机数不同(一般使用时间作为种子) 所在头文件stdlib.h

#include 
......
srand(time(NULL)); 
int i=rand();

**3.**可以使用rand()%n来获取特定范围的随机数 如%n即是模n取余操作,相应可以还有加减来标定范围。

新标准下

定义在头文件中的random库

#include
#include
using namespace std;

int main() {
   default_random_engine e;//随机数引擎(是函数对象类)
   for (int i = 0; i < 10; ++i)
   	cout << e() << endl;//不接受参数,返回一个unsigned整数
   return 0;
}

生成指定范围内的随机数

int main() {
	uniform_int_distribution u(0,9);//随机数分布类
	//范围是[0,9]
	default_random_engine e;
	for (int i = 0; i < 10; ++i)
		cout << u(e) << endl;//注意不是u(e())
	return 0;
}

随机数发生器是指分布对象和引擎对象的组合
对于给定的发生器,每次运行返回相同的数值序列,比如下面的两个数组元素相同;

vector bad(){
	uniform_int_distribution u(-9,9);
	default_random_engine e;
	vector a;
	for (int i = 0; i < 10; ++i)
		a.push_back(u(e));
	return a;
}

int main() {
	vectora1 = bad();
	vectora2 = bad();
	return 0;
}

可以改为一下形式使生成不同的序列

	static uniform_int_distribution u(-9,9);
	static default_random_engine e;

不过此时仅仅是一次程序运行过程中每次调用函数返回的序列不同,但是此时若多次运行此程序并输出a1、a2,每次运行输出结果相同
可设置随机数发生器种子,以下为设置种子的方法

default_random_engine e1;//使用默认种子
default_random_engine e2(1534);//使用给定种子
default_random_engine e3;
e3(1534);//e3与e2种子相同,将生成与e2相同的序列

常使用时间作为种子

uniform_int_distribution u(0, 9);
default_random_engine e(time(0));
for (int i = 0; i < 10; ++i)
	cout << u(e) << " ";

你可能感兴趣的:(C++,笔记)