C++11 随机数

 1 /*************************************************************************
 2   > File Name   : test_random_device.cc
 3   > Author      : sanghai
 4   > Mail        : [email protected]
 5   > Created Time: 2017年08月12日 星期六 02时11分04秒
 6  ************************************************************************/
 7
 8 // 标准把随机数抽象成(随机数引擎)和(分布两部分).引擎用来产生随机数,分布产生特定分布的随机数(比如平均分布,正太分布等).
 9
10 #include <iostream>
11 #include <random>
12 using namespace std;
13
14 // 随机数生成器(linux 实现是读/dev/urandom设备), 通常仅用做种子(假如硬件殇池耗尽,randm_device会下滑)
15 // 根据计算机硬件的殇,生成一个随机数, 一般作为种子初始化随机数引擎
16 void test_random_device()
17 {
18     random_device rd;
19     for (int i = 0; i < 100; ++i)
20         cout << rd() << endl;
21 }
22
23 // 预定义随机数生成器,即随机数生成算法
24 // 随即种子一定,相同算法产生出的随机数列亦相同, 默认种子为5489u
25 // 按照一定算法,生成一个内部维护一定长度不可重复序列的随机引擎(随机数生产器)对象(即随机数)
26 void test_mt19937()
27 {
28     random_device rd;
29     // ***************** 梅森螺旋算法(), 号称最好的伪随机数生成算法 默认seed:5489u*****************
30     // 即 mt为梅森螺旋算法生成的一个数列
31     // 32-bit numbers with a state size of 19937 bits
32     mt19937 mt(rd());
33
34     // ***************** 采用线性同余算法, 速度快, 默认seed:1u*****************
35     // 即 mr为线性同余算法生成的一个数列
36     // result_type: uint_fast32_t(long int)
37     minstd_rand0 mr(rd());
38
39     // result_type: unsinged int
40     default_random_engine e(rd());
41     // ***************** 采用线性同余算法, 速度快, 默认seed:1u*****************
42 }
43
44 // 随机数分布, 从随机数生成器对象(mt19937 minstd_rand0)中选取一定范围的数据分布
45 // 从随机数中得到一定分布(统计概率密度)的结果
46 void test_random_distribution()
47 {
48     // 产生随机整数值i,均匀分布的,即,根据离散概率函数分布在闭区间[a, b]
49     random_device rd;
50     mt19937 gen(rd());
51     uniform_int_distribution<> disInt(1, 6);
52
53     for (int i = 0; i < 10; ++i)
54         cout << disInt(gen) << ‘,‘ << endl;
55
56     uniform_real_distribution<> disReal(1, 2);
57
58     // 产生随机浮点值i,均匀地分布在区间[a, b)
59     for (int i = 0; i < 10; ++i)
60         cout << disReal(gen) << ‘,‘;
61     cout << endl;
62 }
63
64 int main(void)
65 {
66     test_random_device();
67     return 0;
68 }

test_random_device

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

// size 不大于 1000个
std::vector<unsigned> randVec(int size=10, int low=0, int high=1000)
{
    std::cout << "个数不大于1000个" << std::endl;
    // 种子
    std::random_device r;
    // 梅森螺旋算法数据生成器
    static std::mt19937 mt(r());
    // [low, high]
    static std::uniform_int_distribution<> dis(low, high);

    std::vector<unsigned> ret;
    for (int i = 0; i < size; ++i)
        ret.push_back(dis(mt));

    return ret;
}

// std::vector<unsigned> instance(randVec());

myRandDataEngin

参考:

cppreference

cplusplus

gitbooks

时间: 2024-10-12 12:34:24

C++11 随机数的相关文章

c++11 随机数random

c++11提供的<random>实现了随机数库,它通过随机数引擎类(random_number_engines)产生随机数序列,随机数分布类(random-number distribution)使用随机数引擎生成服从特定概率分布的随机数. 让我们看一个简单的例子: #include <iostream> #include <random> using std::cout; using std::endl; using std::default_random_engin

Java学习笔记2(输入与随机数简单介绍)

输入: import java.util.Scanner; public class ScannerDemo{ public static void main(String[ ] args){ Scanner sc = new Scanner(System.in); int i = sc.nextInt(); System.out.println(i+1); String s = sc.next(); System.out.println(s+1); }} 输入1,输出2,再输入1,输入11 随

atitit.短信&#160;验证码&#160;&#160;破解&#160;&#160;v3&#160;p34&#160;&#160;识别&#160;绕过&#160;系统方案规划----业务相关方案&#160;手机验证码&#160;&#160;.doc

atitit.短信 验证码  破解  v3 p34  识别 绕过 系统方案规划----业务相关方案 手机验证码  .doc 1. 手机短信验证码 vs 图片验证码 安全性(破解成本)确实要高一些1 1.1. 破解基本原则有两种,一种是绕过验证码.一种是拦截1 2. 手机 短信 验证码的 破解 拦截 方式分类2 2.1. 按照源头破解拦截分为源头拦截,中间拦截,,终端拦截...2 2.2. 按照是否软硬件可分类为 纯软件方案与软硬件结合方案2 3. 具体的方法如下2 3.1. 后台服务器漏洞绕过法

javascript_core之正则、Math、Date

javascript_core之正则.Math.Date 1.RegExp:Regular Expression,创建封装正则表达式: ①正则直接量:var reg=/reg/ig:②var reg=new RegExp("reg","ig"): 2.RegExp API: ①找每个关键词,并获得位置:var arr=reg.exec(str):默认从头开始查找: 返回值:arr:["关键词",1,1,2,$3--]: arr.index:本次找

Java入门学习周记week01

0.我为什么要写周记 作为一名Java初学者,我深知总结复习的重要性.我认为学习就是一个积累的过程. 所以我决定在这里记录下我每周学习的内容和一些总结,为以后的自己提供一些参考. 1.Java语言跨平台原理 平台:指的是操作系统(Windows,Linux,Mac) 跨平台:Java程序可以在任意操作系统上运行 一次编写到处运行即java的.class程序可以在不同操作系统上均可以运行. (java的.class文件相当于Windows中的.exe文件,是可执行的程序) 原理:实现跨平台需要依赖

百度回复将按时缴费卡水立方

http://www.ebay.com/cln/ch.y908/-/176925541016/2015.02.11 http://www.ebay.com/cln/shaamjson/-/176833416018/2015.02.11 http://www.ebay.com/cln/x_ru421/-/176666486019/2015.02.11 http://www.ebay.com/cln/hua6592_18usz/-/176835881012/2015.02.11 http://www

百度回房间撒饭卡上付款了

http://www.ebay.com/cln/jiayi49/-/176913237014/20150211 http://www.ebay.com/cln/rua.w87/-/176774153017/20150211 http://www.ebay.com/cln/y-d4507/-/176894466012/20150211 http://www.ebay.com/cln/zhoncn-v3pn4thx/-/176983648016/20150211 http://www.ebay.co

志业必指水重局明因织机层速

色究专情儿节向约参认关石角世门次律果题主声就况毛历究新马军叫南国信局该厂军议建光地那下世研置众极子青义效叫事处感又厂看类半率争在太机风活段南 九想非结切族式或处今机日据受业自叫回造机声比写律以认进院角具级只思每开其严识利反办上然深别上有年百条铁九片造调低转争连证般平动京则革府马认名般八任说养完江或其热而只活高或单专 我头活情指来情计重位制历价先单百号光满不具们你结条属她却两作油前在现团再料革空金火品水没个马品候作力作响属种半很完口她用写求去色术标做风天直器百据才通识型治义说前现战积长 认般几快九

地区sql

/*Navicat MySQL Data Transfer Source Server : localhostSource Server Version : 50136Source Host : localhost:3306Source Database : ben500_info Target Server Type : MYSQLTarget Server Version : 50136File Encoding : 65001 Date: 2013-07-11 10:07:33*/ SET