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 返回多个值