随机数

  定义在random中的随机数库通过一组协作的类来生成随机数:random-number-engines(可以生成unsigned随机数序列)和random-number-distribution(使用引擎返回服从特定概率分布的随机数)。二者都是函数对象类

1 default_random_engine e;//生成随机无符号数
2 for(size_t i=0;i<5;i++){
3     cout<< e() <<" ";
4 }

运行结果为    16807 282475249 1622650073 984943658 1144108930 ;

  为了得到在指定范围内的随机数,需要使用random-number-distribution:

1 uniform_int_distribution<unsigned> u(0,9);
2 default_random_engine e;
3 for(size_t i=0;i<5;i++){
4     cout<<u(e)<<" ";//将u作为随机数源
5 }

运行结果为     0 1 7 4 5

  在函数中生成随机数时,可以将引擎和关联的分布对象定义为static的(保持状态),从而避免每次生成相同的随机数序列。

  为引擎设置种子:(1)创建引擎对象时设置(2)调用引擎的seed成员

1 default_random_engine e3;
2 e3.seed(54546);
3 default_random_engine e4(54546);
4 default_random_engine e5(time(0));

  生成非均匀分布的随机数(正态分布)

 1     default_random_engine e1;
 2     normal_distribution<> n(4,1.5);
 3     vector<unsigned> vals(9);
 4     for(size_t i=0;i!=200;i++){
 5         unsigned v=lround(n(e1));
 6         if(v<vals.size())
 7             vals[v]++;
 8     }
 9     for(size_t j=0;j!=vals.size();j++)
10     {
11         cout<<j<<": "<<string(vals[j],'*')<<endl;
12 
13     }

结果

0: ***
1: ********
2: ********************
3: **************************************
4: **********************************************************
5: ******************************************
6: ***********************
7: *******
8: *

 

posted @ 2018-07-19 17:44  闯红灯全国十强  阅读(288)  评论(0编辑  收藏  举报