版权声明:转载请注明出处。 https://blog.csdn.net/u014427196/article/details/49560641

c语言的库函数 rand 生成的随机数为伪随机数。
c++提供随机数引擎类和随机数分布类
头文件: random

随机数引擎:

随机数引擎的例子:

default_random_engine e;
 for (int i = 1;i <= 10;i++)
    cout << e() << endl;//e()对象生成下一个随机数

随机数引擎操作

    default_random_engine e;//默认构造函数
    default_random_engine e(100);//100为随机种子
    e.seed(100);//100为随机种子
    cout << e.min() << endl;//引擎能生成的最小值
    cout << e.max() << endl;//引擎能生成的最大值

分布类型:

为了得到一定范围内的数,使用分布类型的对象:

    uniform_int_distribution<unsigned> u(1, 100);
    default_random_engine e;
    for (int i = 1;i <= 10;i++)
        cout << u(e) << endl;

为了得到随机序列引擎和分布对象定义为static的:

    static uniform_int_distribution<unsigned> u(1, 100);
    static default_random_engine e;
    for (int i = 1;i <= 10;i++)
        cout << u(e) << endl;

设置随机数种子:
可以使用系统的时间函数

default_random_engine e(time(0));

随机初始化的种子。

其他随机数分布

生成随机实数:

    default_random_engine e(time(0));
    uniform_real_distribution<double> v(0,1);//随机实数的函数

    for (int i = 1;i <= 10;i++)
        cout << v(e) << endl;

非均匀分布的随机数

c++支持非均匀分布的随机数,新标准库定义20种分布类型,下面介绍一个正态分布的一个函数:

normal_distribution

例子:

    default_random_engine e(time(0));   
    normal_distribution<> n(4,1.5);//均值为4,标准差1.5
    for (int i = 1;i <= 10;i++)
    {
        int t = n(e);
        for (int j = 1;j <= t;j++)
            cout << "*";
        cout << endl;

    }   

这里写图片描述

bernoulli_distribution 类

用来随机产生bool值,默认概率为0.5-0.5,可修改:

    default_random_engine e(time(0));
    bernoulli_distribution b;
    cout << b(e) << endl;

true的概率修改为99%

    default_random_engine e(time(0));
    bernoulli_distribution b(.99);
    cout << b(e) << endl;