Boost Random

#include "MainScene.h"
#include "SimpleAudioEngine.h"
#include <iostream>
#include <string.h>
using namespace std;

#include "opencv.hpp"
#include <opencv2/features2d.hpp>
#include "opencv2/highgui.hpp"
using namespace cv;

extern "C"
{
#include "SDL.h"

#include <libavutil/imgutils.h>
#include <libavutil/parseutils.h>
#include <libswscale/swscale.h>
#include <libavcodec/avcodec.h>
#include <libavformat/avformat.h>
#include <libavformat/avio.h>
#include <libavutil/file.h>
#include <libavdevice/avdevice.h>
}
#include <boost/random.hpp>
#include <boost/random/random_device.hpp>

Scene* MainScene::createScene()
{
    return MainScene::create();
}


bool MainScene::init()
{
    if ( !Scene::init() )
    {
        return false;
    }

    visibleSize = Director::getInstance()->getVisibleSize();
    Vec2 origin = Director::getInstance()->getVisibleOrigin();
    
    //string filename = "I:/ImageGrid/135708z4u8eha6gucne2ug.jpg";
    //string filename = "D:/PriPro/Pro/simulator/win32/src/client/res/log/Log_1.png";
    string filename = "H:/libcocos2d-x/res/201212211612386.jpg";

    auto s = Sprite::create("201212211612386.jpg");
    s->setScale(0.5);
    s->setPosition3D(Vec3(400, 300, -300));
    this->addChild(s);


    //1、随机数发生器:boost::random::mt19937,生成伪随机数
    //产生随机数类型:boost::uint32_t
    {
        std::time_t now = std::time(0);
        boost::random::mt19937 gen(now);

        //输出最大值和最小值
        //std::cout << boost::random::mt19937::min() << ":" << boost::random::mt19937::max() << std::endl;

        //产生5个随机数,
        for (int i = 0; i < 5; ++i)
        {
            std::cout << gen() << "-";
        }
        //std::cout << std::endl;

        //产生5个随机数,并填充容器
        std::vector<int> vec(5);
        gen.generate(vec.begin(), vec.end());
        for (auto& i : vec)
        {
            std::cout << " 随机数发生器:boost::random::mt19937,生成伪随机数 "<< i << "-";
        }
        std::cout << std::endl;
    }

    //2、随机数发生器 + 随机数分布器:
    //实现的是符合某个特定的区域或符合某种分布的随机数
    {
        //伯努利分布:在0/1中随机产生一个数,就像抛硬币,不是0,就是1,但是是随机的。
        //定义一个随机数生成器
        boost::random::mt19937 gen(time(0));
        //定义一个随机数分布器
        boost::random::bernoulli_distribution<> dist;
        //测试产生随机数
        for (int i = 0; i < 10; ++i)
        {
            std::cout <<"随机数发生器 + 随机数分布器: "<< dist(gen) << std::endl;
        }
    }

    {
        //产生某个整数域范围内的随机数,比如产生0~100之间的随机数
        //定义一个随机数生成器
        boost::random::mt19937 gen(time(0));
        boost::random::uniform_int_distribution<> dist(0, 100);
        //测试产生随机数
        for (int i = 0; i < 10; ++i)
        {
            std::cout << "产生某个整数域范围内的随机数 "<<dist(gen) << std::endl;
        }
    }

    {
        //产生0~1之间的小数
        //定义一个随机数生成器
        boost::random::mt19937 gen(time(0));
        boost::random::uniform_01<> dist;
        //测试产生随机数
        for (int i = 0; i < 10; ++i)
        {
            std::cout << "产生0~1之间的小数 "<<dist(gen) << std::endl;
        }
    }

    {
        //小整数域上的均匀分布
        boost::random::mt19937 gen(time(0));
        boost::random::uniform_smallint<> dist(1, 100);
        //测试产生随机数
        for (int i = 0; i < 10; ++i)
        {
            std::cout <<"小整数域上的均匀分布 "<< dist(gen) << std::endl;
        }
    }

    {
        //实现了任意区间的实数分布随机数,类型是double类型
        boost::random::mt19937 gen(time(0));
        boost::random::uniform_real_distribution<> dist(1.0, 100.0);
        //测试产生随机数
        for (int i = 0; i < 10; ++i)
        {
            std::cout << " 任意区间的实数分布随机数 "<<dist(gen) << std::endl;
        }
    }

    //3.变量发生器,作用:只是为了方便使用
    //是随机数发生器和分布器的组合,示例:
    {
        //定义一个随机数发生器
        boost::random::mt19937 mt(time(0));
        //定义一个随机数分布器
        boost::random::uniform_smallint<> us(1, 100);
        //定义一个变量发生器,注意:参数2分布器的参数形式不能是指针或是引用!
        boost::random::variate_generator<boost::random::mt19937&, boost::random::uniform_smallint<> > gen(mt, us);
        //测试生成10随机数
        for (int i = 0; i < 10; ++i)
        {
            std::cout << "变量发生器,作用:只是为了方便使用 "<<gen() << std::endl;
        }
    }

    //4、随机数生成器:random_device,真随机数
    {
        //最大最小值:
        std::cout << boost::random::random_device::min() << ":" << boost::random::random_device::max() << std::endl;

        boost::random::random_device gen;
        for (int i = 0; i < 20; ++i)
        {
            std::cout <<"随机数生成器:random_device,真随机数 "<< gen() << std::endl;
        }
    }


    return true;
}

结果

H:libcocos2d-xuildDebug>libcocos.exe
Ready for GLSL
Ready for OpenGL 2.0

{
        gl.version: 4.6.13559 Compatibility Profile Context 26.20.12028.2
        gl.supports_NPOT: true
        cocos2d.x.version: cocos2d-x-3.17.2
        cocos2d.x.compiled_with_profiler: false
        cocos2d.x.build_type: DEBUG
        cocos2d.x.compiled_with_gl_state_cache: true
        gl.max_texture_size: 16384
        gl.supports_OES_packed_depth_stencil: false
        gl.vendor: ATI Technologies Inc.
        gl.renderer: AMD Radeon RX 580 2048SP
        gl.max_texture_units: 160
        gl.supports_ETC1: false
        gl.supports_S3TC: true
        gl.supports_ATITC: false
        gl.supports_PVRTC: false
        gl.supports_BGRA8888: false
        gl.supports_discard_framebuffer: false
        gl.supports_vertex_array_object: true
        gl.supports_OES_map_buffer: false
        gl.supports_OES_depth24: false
}


536369200-340623271-4276119838-1931111883-4078776906- 随机数发生器:boost::random::mt19937,生成伪随机数 1938412408- 随机数发生器:boost::random::mt19937,生成伪随机数 919002582- 随机数发生器:boost::random::mt19937,生成伪随机数 -404798720- 随机数发生器:boost::random::mt19937,生成伪随机数 -277944272- 随机数发生器:boost::random::mt19937,生成伪随机数 -328668786-
随机数发生器 + 随机数分布器: 1
随机数发生器 + 随机数分布器: 1
随机数发生器 + 随机数分布器: 0
随机数发生器 + 随机数分布器: 1
随机数发生器 + 随机数分布器: 0
随机数发生器 + 随机数分布器: 1
随机数发生器 + 随机数分布器: 1
随机数发生器 + 随机数分布器: 0
随机数发生器 + 随机数分布器: 0
随机数发生器 + 随机数分布器: 0
产生某个整数域范围内的随机数 12
产生某个整数域范围内的随机数 8
产生某个整数域范围内的随机数 100
产生某个整数域范围内的随机数 45
产生某个整数域范围内的随机数 95
产生某个整数域范围内的随机数 45
产生某个整数域范围内的随机数 21
产生某个整数域范围内的随机数 91
产生某个整数域范围内的随机数 94
产生某个整数域范围内的随机数 93
产生0~1之间的小数 0.124883
产生0~1之间的小数 0.0793075
产生0~1之间的小数 0.995612
产生0~1之间的小数 0.449622
产生0~1之间的小数 0.949664
产生0~1之间的小数 0.451322
产生0~1之间的小数 0.213972
产生0~1之间的小数 0.90575
产生0~1之间的小数 0.935286
产生0~1之间的小数 0.923476
小整数域上的均匀分布 1
小整数域上的均匀分布 72
小整数域上的均匀分布 39
小整数域上的均匀分布 84
小整数域上的均匀分布 7
小整数域上的均匀分布 9
小整数域上的均匀分布 83
小整数域上的均匀分布 77
小整数域上的均匀分布 25
小整数域上的均匀分布 11
 任意区间的实数分布随机数 13.3634
 任意区间的实数分布随机数 8.85145
 任意区间的实数分布随机数 99.5656
 任意区间的实数分布随机数 45.5126
 任意区间的实数分布随机数 95.0168
 任意区间的实数分布随机数 45.6809
 任意区间的实数分布随机数 22.1832
 任意区间的实数分布随机数 90.6693
 任意区间的实数分布随机数 93.5933
 任意区间的实数分布随机数 92.4241
变量发生器,作用:只是为了方便使用 1
变量发生器,作用:只是为了方便使用 72
变量发生器,作用:只是为了方便使用 39
变量发生器,作用:只是为了方便使用 84
变量发生器,作用:只是为了方便使用 7
变量发生器,作用:只是为了方便使用 9
变量发生器,作用:只是为了方便使用 83
变量发生器,作用:只是为了方便使用 77
变量发生器,作用:只是为了方便使用 25
变量发生器,作用:只是为了方便使用 11
0:4294967295
随机数生成器:random_device,真随机数 3184181887
随机数生成器:random_device,真随机数 1839758307
随机数生成器:random_device,真随机数 930484113
随机数生成器:random_device,真随机数 2087181485
随机数生成器:random_device,真随机数 901289463
随机数生成器:random_device,真随机数 2204950096
随机数生成器:random_device,真随机数 1487585537
随机数生成器:random_device,真随机数 1386460697
随机数生成器:random_device,真随机数 2340326506
随机数生成器:random_device,真随机数 596825156
随机数生成器:random_device,真随机数 2696036027
随机数生成器:random_device,真随机数 380201607
随机数生成器:random_device,真随机数 3070663986
随机数生成器:random_device,真随机数 2850338511
随机数生成器:random_device,真随机数 1854585580
随机数生成器:random_device,真随机数 464957364
随机数生成器:random_device,真随机数 2378991457
随机数生成器:random_device,真随机数 3082276196
随机数生成器:random_device,真随机数 3170197326
随机数生成器:random_device,真随机数 646490642
cocos2d: QuadCommand: resizing index size from [-1] to [2560]

原文地址:https://www.cnblogs.com/YZFHKMS-X/p/13963762.html