C++primer 17.4 随机数
原创
©著作权归作者所有:来自51CTO博客作者mb640163eb338d0的原创作品,请联系作者获取转载授权,否则将追究法律责任
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;