C++primer 17.4 随机数
2015-11-01 19:13
225 查看
c语言的库函数 rand 生成的随机数为伪随机数。
c++提供随机数引擎类和随机数分布类
头文件: random
随机数引擎操作
为了得到随机序列引擎和分布对象定义为static的:
设置随机数种子:
可以使用系统的时间函数
随机初始化的种子。
normal_distribution
例子:
bernoulli_distribution 类
用来随机产生bool值,默认概率为0.5-0.5,可修改:
true的概率修改为99%
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;
相关文章推荐