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. String、StringBuffer、StringBuilder区别

    String.StringBuffer.StringBuilder区别 StringBuffer.StringBuilder和String一样,也用来代表字符串.String类是不可变类,任何对Str ...

  2. http://www.36dsj.com/archives/46131

    https://docs.growingio.com/Developer%20Document.html https://youdata.163.com/dash/39706/editor?pid=7 ...

  3. Halcon常用算子02

    threshold:阈值分割       minGray<=g<=maxGray select_shape:选取特定区域(Region) regiongrowing:区域生长法分割图像获得 ...

  4. A除以B

    1017 A除以B (20)(20 分) 本题要求计算A/B,其中A是不超过1000位的正整数,B是1位正整数.你需要输出商数Q和余数R,使得A = B * Q + R成立. 输入格式: 输入在1行中 ...

  5. cdnbest如何在站点里开启强制缓存

    在站点设置中如下图设置: 强制缓存有两种方式,一种是文件类型,一种是url方式

  6. Mysql 单表查询 子查询 关联查询

    数据准备: ## 学院表create table department( d_id int primary key auto_increment, d_name varchar(20) not nul ...

  7. 图论最短路径算法总结(Bellman-Ford + SPFA + DAGSP + Dijkstra + Floyd-Warshall)

    这里感谢百度文库,百度百科,维基百科,还有算法导论的作者以及他的小伙伴们...... 最短路是现实生活中很常见的一个问题,之前练习了很多BFS的题目,BFS可以暴力解决很多最短路的问题,但是他有一定的 ...

  8. Head First Servlets & JSP 学习笔记 第九章 —— 使用JSTL

    JSTL1.1 不是JSP2.0规范的一部分!你能访问Servlet和JSP API 不意味着你能访问JSTL! 使用JSTL之前,需要将两个文件("jstl.jar" 和 &qu ...

  9. 回溯算法_ BackTracking

     目前还存在的疑问: 1. 所谓的该分支满足条件之后就回退到上一层节点,可是加谁呢? x[i+1]  ?? 加到 N, 不满足target sum条件就返回上一级(同时改变上一级数为 i+1...纵向 ...

  10. Linux系统中的tar命令

    时间一长什么东西都容易忘记,尤其是一些不常用的东西忘记的更快,所以避免忘记,就记录下来,可以方面使用的时候查询.Tar命令在linux系统中算是一个比较重要的命令,今天就针对该命令进行总结一下. 1. ...