C++ Primer 5th笔记(chap 17 标准库特殊设施)随机数引擎 vs rand 函数

Posted thefist11

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了C++ Primer 5th笔记(chap 17 标准库特殊设施)随机数引擎 vs rand 函数相关的知识,希望对你有一定的参考价值。

1. 结果范围

  • 随机数引擎:生成的 unsigned 整数在一个系统定义的范围内
  • rand 生成的数的范围:在 0 到 RAND_MAX 之间

eg.

 一个引擎类型的范围可以通过调用该类型对象的 min 和 max 成员来获得:
cout <<  "min: " << e.min ( ) <<  " max: " << e.max () <<  endl;

输出

min: 1 max: 2147483646

1.1 引擎生成一个数值序列

错误的定义方法

vector<unsigned >bad_randVec()
{
    default_random_engine e;
    uniform_int_distribution<unsigned >u(0,9);
    vector<unsigned >ret;
    for(size_t i = 0;i<100;i++)
        ret.push_back(u(e));
    return ret;
}
// 但是 每次调用这个函数都会返回相同的 vector
vector<unsigned >v1(bad_randVec());
vector<unsigned >v2(bad_randVec());
// 将会打印输出 equal
cout << ((v1==v2) ? "equal" : "not equal") << endl;

正确的定义方法:将引擎和关联的分布对象定义为 static

vector<unsigned >good_randVec()
{
    // 由于我们希望引擎和分布对象保持状态,因此应该将他们定义为static的,从而每次调用都生成新的数
    static default_random_engine e;
    static uniform_int_distribution<unsigned > u(0,9);
    vector<unsigned > ret;
    for(size_t i = 0; i<100;i++)
        ret.push_back(u(e));
    return ret;
}

以上是关于C++ Primer 5th笔记(chap 17 标准库特殊设施)随机数引擎 vs rand 函数的主要内容,如果未能解决你的问题,请参考以下文章

C++ Primer 5th笔记(chap 17 标准库特殊设施)输出补白

C++ Primer 5th笔记(chap 17 标准库特殊设施)bitset类型

C++ Primer 5th笔记(chap 17 标准库特殊设施)正则表达式

C++ Primer 5th笔记(chap 17 标准库特殊设施)tuple 返回多个值

C++ Primer 5th笔记(chap 17 标准库特殊设施)控制输入格式

C++ Primer 5th笔记(chap 17 标准库特殊设施)bitset操作