C++_3——库(random)
这一系列文章的目的是在学习了C++基础后,继续补充一些C++基础和进阶的知识点,包括C++11的相关内容。
以C++11标准为基础。
C++网站:http://www.cplusplus.com/reference/
- random库是C++11引入的随机数生成库,这个库用Generators和Distributions生成随机数;
- Generators用来生成均匀分布的随机数,这些随机数是伪随机数,可以用时间作为种子将Generators初始化,看起来随机得更好;
- Distributions将Generators生成的随机数按照一定的分布规律重新输出;
Generators
- seed_seq
seed_seq是random提供的一个种子序列类// seed_seq(); std::seed_seq seed1; // template<class T> // seed_seq (initializer_list<T> il); std::seed_seq seed2 = {102,406,7892}; // template<class InputIterator> // seed_seq (InputIterator first, InputIterator last); std::string foo = "Seeding a RNG"; std::seed_seq seed3 (foo.begin(),foo.end()); - default_random_engine
如果是简单地使用random生成伪随机数,可以选择default_random_engine// 使用默认种子初始化 std::default_random_engine generator; // 使用时间初始化 unsigned seed1 = std::chrono::system_clock::now().time_since_epoch().count(); std::default_random_engine g1 (seed1); // 使用seed_seq初始化 string str="abscjccjac"; std::seed_seq seed2 (str.begin(),str.end());
Distributions
random提供了丰富的分布类型
int a,b,t,k;
double c,d,p,miu,lamda,alpha,beta,sigma;
- 均匀分布

std::uniform_int_distribution<int> distribution_int(a,b); std::uniform_real_distribution<double> distribution_real(c,d); - 伯努利分布

std::bernoulli_distribution distribution(p); - 二项式分布

std::binomial_distribution<int> distribution (t,p); - 几何分布

std::geometric_distribution<int> distribution(p); - 负二项式分布

std::negative_binomial_distribution<int> distribution (k,p); - 泊松分布

std::poisson_distribution<int> distribution (miu); - 指数分布

std::exponential_distribution<double> distribution (lamda); - gamma分布

std::gamma_distribution<double> distribution (alpha,beta); - 正态分布

std::normal_distribution<double> distribution (miu,sigma); - 柯西分布

double a,b; std::cauchy_distribution<double> distribution (a,b); - 其他
std::weibull_distribution std::extreme_value_distribution std::lognormal_distribution std::chi_squared_distribution std::fisher_f_distribution std::piecewise_constant_distribution std::piecewise_linear_distribution
Generators结合Distributions生成随机数
std::default_random_engine generator; //定义引擎
std::normal_distribution<double> distribution(miu,sigma); //定义正态分布,模板类型即输出数的类型
double number = distribution(generator); //产生分布值
本文介绍C++11中random库的使用方法,包括Generators和Distributions的概念及应用。Generators用于生成均匀分布的伪随机数,而Distributions则负责按特定分布调整这些随机数。
399

被折叠的 条评论
为什么被折叠?



