1 std::default_random_engine generator; 2 std::uniform_int_distribution<int> dis(0,100); 3 for(int i=0;i<5;i++) 4 { 5 std::cout<<dis(generator)<<std::endl; 6 }
若是嫌每次調用都要傳入generator對象麻煩,可使用std::bind,要包含頭文件functionallinux
1 std::default_random_engine generator; 2 std::uniform_int_distribution<int> dis(0,100); 3 auto dice= std::bind(dis,generator); 4 for(int i=0;i<5;i++) 5 { 6 std::cout<<dice()<<std::endl; 7 }
1 std::default_random_engine generator(time(NULL)); 2 std::uniform_int_distribution<int> dis(0,100); 3 auto dice= std::bind(dis,generator); 4 for(int i=0;i<5;i++) 5 { 6 std::cout<<dice()<<std::endl; 7 }
linear_congruential_engine 線性同餘法mersenne_twister_engine 梅森旋轉法substract_with_carry_engine滯後Fibonacci
template <class UIntType, UIntType a, UIntType c, UIntType m>class linear_congruential_engine;第一個參數:生成器類型unsigned int,unsigned long等第二到第四個參數:是線性同餘法公遞推公式Nj+i =(AxNj+C) (mod M)裏的三個常數值A,C,M要求:若是m不爲0,a,c的值要小於m
1 typedef linear_congruential<unsigned long, 16807, 0, 2147483647> minstd_rand0;
1 typedef linear_congruential<unsigned long, 48271, 0, 2147483647> minstd_rand;
minstd_rand()minstd_rand0利用適配器變種後的線性同餘法knuth_b minstd_rand0 with shuffle_order_engine
default_random_engine()mt19937mt19937_64
ranlux24_baseranlux48_base
ranlux24 ranlux24_base with discard_block_engineranlux48 ranlux48_base with discard_block_engine
做用1:改變生成類型,利用模版參數做用2:改變值區間,利用實例構造函數參數。或其響應的成員函數設置參數。做用3:改變機率分佈,選用不一樣的分佈器類型
uniform_int_distribution 整數均勻分佈uniform_real_distribution 浮點數均勻分佈
bernoulli_distribution 伯努利分佈binomial_distribution 二項分佈geometry_distribution 幾何分佈negative_biomial_distribution 負二項分佈
poisson_distribution 泊松分佈exponential_distribution 指數分佈gamma_distribution 伽馬分佈weibull_distribution 威布爾分佈extreme_value_distribution 極值分佈
normal_distribution 正態分佈chi_squared_distribution 卡方分佈cauchy_distribution 柯西分佈fisher_f_distribution 費歇爾F分佈student_t_distribution t分佈
discrete_distribution 離散分佈piecewise_constant_distribution 分段常數分佈piecewise_linear_distribution 分段線性分佈