C++ 11 新特性:随机数库

在C++11之前,C和C++都依赖于函数rand来生成随机数。此函数生成均匀分布的伪随机整数,每个随机数的范围在0和一个系统相关的最大值(至少为32767)之间。

rand函数有一些问题:很多程序需要不同范围的随机数,一些应用需要非均匀分布的数。而程序员为了解决这些问题而试图转换rand生成的随机数的范围、类型或分布时,常常会引入非随机性。

定义在头文件random中的随机数库通过一组协作的类来解决这些问题:随机数引擎类和随机数分布类。一个引擎类可以生成unsigned随机数序列,一个分布类使用一个引擎类生成指定类型的、在给定范围内的、服从特定概率分布的随机数。

C++程序不应该使用库函数rand,而应使用default_random_engine类和恰当的分布类对象。

随机数引擎和分布

标准库定义了多个随机数引擎类,区别在于性能和随机性质量不同。每个编译器都会指定其中一个作为default_random_engine类型,此类型一般具有最常用的特性。随机数引擎是函数对象类,定义了一个不接受参数的调用运算符,并返回一个随机的unsigned整数。

	std::default_random_engine e;
	for (size_t i = 0; i < 10; ++i)
		std::cout << e() << " ";
	std::cout << std::endl;

随机数引擎的操作有:
在这里插入图片描述

分布类型和引擎

对于大多数场合,随机数引擎的输出是不能直接使用的,问题在于生成的随机数的值范围通常与我们需要的不符。为了得到一个指定范围内的数,我们使用一个分布类型的对象:

	std::uniform_int_distribution<unsigned> u(0, 9);
	std::default_random_engine e;
	for (size_t i = 0; i < 10; 
  • 1
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值