【C++11】随机数函数库random

本文介绍了C++11的随机数库random,包括随机数生成器和分布器的概念。生成器如线性同余法、梅森旋转法、滞后Fibonacci法,而分布器可以将生成的均匀分布映射到各种常见分布,如均匀分布、正态分布等。通过设置种子可以确保随机数序列的不同,推荐使用time()作为种子。并给出了使用该库生成随机数的基本步骤。
摘要由CSDN通过智能技术生成

1.随机数由生成器和分布器结合产生

生成器generator:能够产生离散的等可能分布数值
分布器distributions: 能够把generator产生的均匀分布值映射到其他常见分布,如均匀分布uniform,正态分布normal,二项分布binomial,泊松分布poisson

2.分布器利用运算符()产生随机数,要传入一个generator对象作为参数

std::default_random_engine generator;  
std::uniform_int_distribution<int> dis(0,100);  
for(int i=0;i<5;i++)  
{  
    std::cout<<dis(generator)<<std::endl;  
}  

如果嫌每次调用都要传入generator对象麻烦,可以使用std::bind,要包含头文件functional
auto dice = std::bind(distribution,generator)以后就可以直接调用dice()产生复合均匀分布的随机数。但是多次运行上例会发现每次产生的随机数序列都一样,因为没有设定种子(同cstdlib库中的rand和srand关系)

std::default_random_engine generator;  
std::uniform_int_distribution<int> dis(0,100);  
auto dice= std::bind(dis,generator);  
for(int i=0;i<5;i++)  
{  
    std::cout<<dice()<<std::endl;  
}  
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值