C++随机数(default_random_engine)

17 篇文章 0 订阅

C++11之前生成随机数

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

  如 `int i=rand();`  

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

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

#include <stdlib.h>
......
srand(time(NULL)); 
int i=rand();

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

新标准下

定义在头文件中的random库

#include<iostream>
#include<random>
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<unsigned> 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<int> bad(){
	uniform_int_distribution<int> u(-9,9);
	default_random_engine e;
	vector<int> a;
	for (int i = 0; i < 10; ++i)
		a.push_back(u(e));
	return a;
}

int main() {
	vector<int>a1 = bad();
	vector<int>a2 = bad();
	return 0;
}

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

	static uniform_int_distribution<int> 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<int> u(0, 9);
default_random_engine e(time(0));
for (int i = 0; i < 10; ++i)
	cout << u(e) << " ";
  • 8
    点赞
  • 19
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值