C++的随机数引擎有以下几个要点需要注意:

   1、随机数发生器使用同一种子会生成相同序列的随机数序列

  2、为了让程序每次运行都会生成不同的随机结果,我们可以使用 time(0) 产生一个随机数种子

  3、我们必须传递引擎本身给分布对象,因为有些分布可能需要调用引擎多次才能得出结果

以下是几种随机分布:

  1、均匀分布:(1) 产生随机整数:uniform_int_distribution<[type]> u[(range)]

           (2) 产生随机小数:uniform_real_distribution<[type]> u[(range)]

   2正态分布:normal_distribution<[type]> n(E, D)

   3伯努利分布:bernoulli_distribution b[(概率)],返回 bool 值,且返回 true 的概率为常数,默认为 0.5 

注:这些随机分布都包含在头文件 random 里面

#include <iostream>
#include <cstdlib>
#include <ctime>
#include <cmath>
#include <random>
#include <vector> using namespace std; int main()
{
static default_random_engine e;
// 返回该引擎能生成的最小及最大值
cout<<"Min: "<<e.min()<<ends<<"Max: "<<e.max()<<endl; // time 返回以秒计的时间
e.seed(time()); static uniform_int_distribution<unsigned> u(, );
cout<<"生成[0,9]的3个随机整数为:";
for (size_t i = ; i < ; ++i)
cout<<u(e)<<ends;
cout<<endl; /*
u.min() 和 u.max() 返回 u(e) 能生成的最小和最大值
u.reset() 重建 u 的状态,使随后对 u 的使用不依赖于 u 已经生成的值
*/ static uniform_real_distribution<double> r(, );
cout<<"生成[0, 1]的3个随机小数为:";
for (size_t i = ; i < ; ++i)
cout<<r(e)<<ends;
cout<<endl; static normal_distribution<> n(, 1.5);
cout<<"正态分布个数统计:"<<endl;
vector<unsigned> vals();
for (size_t i = ; i != 1; ++i){
// cmath 的 lround 函数把值舍入到最接近的整数
unsigned v = lround(n(e));
if (v < vals.size())
++vals[v];
}
for (size_t i = ; i < vals.size(); ++i)
cout<<i<<":\t"<<vals[i]<<endl; // 返回 true 的概率为 0
static bernoulli_distribution b();
for (size_t i = ; i < 3; ++i)
cout<<boolalpha<<b(e)<<noboolalpha<<ends;
cout<<endl; system("pause"); return 0;
}

C++随机数引擎的更多相关文章

  1. C/C++基础----随机数分布和随机数引擎

    随机数分布 除了伯努利分布,其他都是模板,接收单个类型参数,指出分布生成的结果类型. 表示分布生成浮点数,float.double或long double 表示要求一个整型类型,不包括bool或任何c ...

  2. 【C++】随机数引擎

    rand() 基本:使用随机数时,经常见到的是C标准库提供的函数rand(),这个函数会生成一个0到RAND_MAX之间的一个整形数: 分布:为了得到一个给定范围内的随机数,通常会对生成的随机数取余: ...

  3. C++11--随机数引擎和随机数分布<random>

    /* 随机数引擎: * 有状态的随机数发生器,生成在预定义的最大小值之间的随机数 * 不是真正的随机数--伪随机 */ int main () { std::default_random_engine ...

  4. C++ 11 笔记 (六) : 随机数

    以前生成一个随机数都是这样: srand(time(NULL)); rand(); 在C++11中,标准库中增加了随机数引擎 std::default_random_engine 这个好东西,然后我们 ...

  5. C/C++生成随机数

    一.rand和srand   在C++11标准出来之前,C/C++都依赖于stdlib.h头文件的rand或者srand来生成随机数.   其不是真正的随机数,是一个伪随机数,是根据一个数(我们可以称 ...

  6. C/C++基础----标准库几个工具库tuple,bitset,正则表达式,随机数,IO库

    tuple tuple可以有任意多个成员 默认初始化,值初始化 构造函数是explicit,必须直接初始化 make_tuple(v1,v2,-,vn) get<i> (t) 返回第i个数 ...

  7. c++随机数及rand()的缺陷

    c++生成随机整数和浮点数如下: #include <random> using namespace std; int _tmain(int argc, _TCHAR* argv[]) { ...

  8. C++11 随机数

    C++11带来诸多特性,random就是其一. 随机数由生成器和分布器结合产生 生成器generator:能够产生离散的等可能分布数值(需要种子,不然每次生存的随机数都一样) 分布器distribut ...

  9. C++中随机数的生成

    1.随机数由生成器和分布器结合产生 生成器generator:能够产生离散的等可能分布数值 分布器distributions: 能够把generator产生的均匀分布值映射到其他常见分布,如均匀分布u ...

随机推荐

  1. 550 5.7.1 Client does not have permissions to send as this sender

    收发邮件时出现以上这种情况,系统提示550 5.7.1 Client does not have permissions to send as this sender,这是什么原因赞成的呢? 活动目录 ...

  2. SQL Server error

    原因:文件没有权限 出错: TITLE: Microsoft SQL Server Management Studio------------------------------ Attach dat ...

  3. 最流行的Python编辑器/IDEs你认识吗?

    来源商业新知网,原标题:来!带你认识几种最流行的Python编辑器/IDEs(附链接) 大数据文摘授权转载自数据派THU 作者:By Gregory Piatetsky 格雷戈里·皮亚特斯基,KDnu ...

  4. Apache 修改端口号

    默认是80端口,可在httpd.conf文件中修改以下2个地方的端口号为预定的即可,例如修改为8080端口 把httpd.conf 中Listen 80 改成Listen 8080 把ServerNa ...

  5. php 获取数组深度的key

    1.数组 深度遍历 function fun($a,&$b) { foreach ($a as $k=>$val) { if (is_array($val)) { $b[]=$k; fu ...

  6. 阅读【现代网络技术 SDN/NFV/QOE 物联网和云计算】 第一章

    本人打算阅读这本书来了解物联网和云计算的基础架构和设计原理.特作笔记如下: 作者: William  Stallings 本书解决的主要问题: 由单一厂商例如IBM向企业或者个人提供IT产品和服务,包 ...

  7. C++继承中关于子类构造函数的写法

    构造方法用来初始化类的对象,与父类的其它成员不同,它不能被子类继承(子类可以继承父类所有的成员变量和成员方法,但不继承父类的构造方法).因此,在创建子类对象时,为了初始化从父类继承来的数据成员,系统需 ...

  8. 异常解决 Unable to write generated Java files for schemas: null

    错误是在使用cxf调用其他系统接口时报出的.而且问题很诡异,只有服务器调用时才报错,本地直接写main方法直接调用却正常的.以下是异常的堆栈: ERROR c.k.p.webservice.WebSe ...

  9. git 添加分支并与远程连接

    今天由于项目需要,要改版,为了不影响当前网站,所以用分支来管理 首先,在本地添加分支dev git checkout -b dev 提交远程,让同事拉取这个分支,我是直接push了,推到远程. 同事在 ...

  10. sublime text 换行与不换行设置

    # 修改添加如下图右侧红框内容即可- 打开文件不换行