C++:随机数生成器(random-number generator) 详解

随机数, C语言的函数是rand(), C++则是随机数生成器(random-number generator) = 分布对象(distribution object) + 引擎(engine);

使函数每次生成不同的随机数, 需要使用静态(static)局部变量, 这样分布对象和引擎就能保持(hold)状态(state), 每次都生成一个新的;

生成随机的整数, 使用分布对象uniform_int_distribution<>, 默认模板参数是int;

生成随机的浮点数, 使用分布对象uniform_real_distribution<>, 默认模板参数是double;

更多精彩内容:http://www.bianceng.cnhttp://www.bianceng.cn/Programming/cplus/

代码:

#include <iostream>
#include <vector>
#include <string>
#include <random>  

using namespace std;  

std::vector<unsigned> good_randVec()
{
    static std::default_random_engine e; //静态
    static std::uniform_int_distribution<unsigned> u(0,9); //静态
    std::vector<unsigned> ret;
    for(size_t i=0; i<10; ++i)
        ret.push_back(u(e));
    return ret;
}  

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

    std::cout << "uniform : ";
    std::uniform_int_distribution<unsigned> u(0, 9); //即[0, 9]
    for(size_t i=0; i<10; ++i)
        std::cout << u(e) << " ";
    std::cout << std::endl;  

    std::cout << "min : " << e.min() << " max : " << e.max() << std::endl;  

    std::vector<unsigned> v1(good_randVec());
    std::vector<unsigned> v2(good_randVec());
    for(size_t i=0; i<v1.size(); ++i)
        std::cout << v1[i] << " ";
    std::cout << std::endl;
    for(size_t i=0; i<v2.size(); ++i)
        std::cout << v2[i] << " ";
    std::cout << std::endl;  

    std::uniform_real_distribution<double> ud(0, 1);
    std::cout << "float : ";
    for(size_t i=0; i<10; ++i)
        std::cout << ud(e) << " ";
    std::cout << std::endl;  

    return 0;
}

输出:

engine : 16807 282475249 1622650073 984943658 1144108930 470211272 101027544 1457850878 1458777923 2007237709
uniform : 3 5 8 0 0 5 6 0 3 0
min : 1 max : 2147483646
0 1 7 4 5 2 0 6 6 9
3 5 8 0 0 5 6 0 3 0
float : 0.686773 0.930436 0.526929 0.653919 0.701191 0.762198 0.0474645 0.328234 0.75641 0.365339

作者:csdn博客 Spike_King

以上是小编为您精心准备的的内容,在的博客、问答、公众号、人物、课程等栏目也有的相关内容,欢迎继续使用右上角搜索按钮进行搜索c++
, 对象
, include
, 随机数
, c++ 随机函数 ...
, 分布
, 生成
, c++随机数
, C语言生成随机数
, C++生成随机数
, C++随机数生成
, c++随机数函数
随机数生成器
tonegenerator详解api、generatorconfig 详解、labview c generator、c generator、c code generator,以便于您获取更多的相关知识。

时间: 2024-08-31 04:38:17

C++:随机数生成器(random-number generator) 详解的相关文章

C#学习笔记- 随机函数Random()的用法详解_C#教程

Random.Next() 返回非负随机数: Random.Next(Int) 返回一个小于所指定最大值的非负随机数 Random.Next(Int,Int) 返回一个指定范围内的随机数,例如(-100,0)返回负数 1.random(number)函数介绍 见帮助文档,简单再提一下,random(number)返回一个0~number-1之间的随机整数.参数number代表一个整数. 示例: trace(random(5)); 2.Math.random() 见帮助文档.返回一个有14位精度的

JS产生随机数的几个用法详解_javascript技巧

JS产生随机数的几个用法详解 <script> function GetRandomNum(Min,Max) { var Range = Max - Min; var Rand = Math.random(); return(Min + Math.round(Rand * Range)); } var num = GetRandomNum(1,10); alert(num); </script> var chars = ['0','1','2','3','4','5','6','7

JS生成某个范围的随机数【四种情况详解】_javascript技巧

前言: JS没有现成的函数,能够直接生成指定范围的随机数. 但是它有个函数:Math.random()  这个函数可以生成 [0,1) 的一个随机数. 利用它,我们就可以生成指定范围内的随机数. 而涉及范围的话,就有个边界值的问题.这样就包含四种情况: 1)min ≤ r ≤ max  (一般这种比较常见) 2)min ≤ r < max 3) min < r ≤ max 4)min < r < max 一.min ≤ r ≤ max function RandomNumBoth(

MyBatis Generator 详解(good)

idea中有plugin可提高效率: http://www.henryxi.com/use-idea-mybatis-plugin-generate-mapper-files eg: <?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE generatorConfiguration PUBLIC "-//mybatis.org//DTD MyBatis Generator Configurati

生成随机数rand函数的用法详解_C 语言

函数rand()是真正的随机数生成器,而srand()会设置供rand()使用的随机数种子.如果你在第一次调用rand()之前没有调用srand(),那么系统会为你自动调用srand().而使用同种子相同的数调用 srand()会导致相同的随机数序列被生成.srand((unsigned)time(NULL))则使用系统定时/计数器的值做为随机种子.每个种子对应一组根据算法预先生成的随机数,所以,在相同的平台环境下,不同时间产生的随机数会是不同的,相应的,若将srand(unsigned)tim

C++:随机生成器 伯努利分布(bernoulli distribution) 详解

伯努利分布(bernoulli distribution), 是判断某件事情发生或者未发生的概率; 给定参数p, 可以修改概率的值, 发生概率(true)是p,未发生概率(false)是1-p; 随机库, 提供分布对象bernoulli_distribution, 输出bool值, 发生为true, 未发生为false; 伯努利分布, 概率为0.5时, 可以等概率输出一个二元事件, 如先后顺序; 注意: 引擎和分布对象, 声明在函数外, 则每次调用, 都会产生不同的值, 但却是固定的, 可以使用

ORACLE NUMBER类型详解

1>.NUMBER类型细讲:Oracle number datatype 语法:NUMBER[(precision [, scale])]简称:precision --> p      scale     --> s NUMBER(p, s)范围: 1 <= p <=38, -84 <= s <= 127保存数据范围:-1.0e-130 <= number value < 1.0e+126   保存在机器内部的范围: 1 ~ 22 bytes 有效为:

Python Yield Generator详解

本文将由浅入深详细介绍yield以及generator,包括以下内容:什么generator,生成generator的方法,generator的特点,generator基础及高级应用场景,generator使用中的注意事项.本文不包括enhanced generator即pep342相关内容. generator基础 在python的函数(function)定义中,只要出现了yield表达式(Yield expression),那么事实上定义的是一个generator function, 调用这

Qt定时器和随机数详解_C 语言

环境是:Windows 7 + Qt 4.8.1 +Qt Creator 2.4.1 一.定时器 Qt中有两种方法来使用定时器,一种是定时器事件,另一种是使用信号和槽.一般使用了多个定时器时最好使用定时器事件来处理. 1.新建Qt Gui应用,项目名称为myTimer,基类选择QWidget,类名为Widget. 2.到widget.h文件中添加函数声明: protected:     void timerEvent(QTimerEvent *); 然后添加私有变量定义: int id1, id