C++11 随机数生成方法
在C++11以前,我生成随机数的方式一般是使用rand() % x 以生成[0,x)范围内的随机数。不过这种随机数生成方法功能过于单一,无法满足复杂的需求。例如,rand()无法按照正太分布生成随机数,也无法按照均匀分布生成。所以我学习了C++11中的新内容来满足此方面的需求。
#include <iostream>
#include <random>
int main()
{
std::random_device rd; // Will be used to obtain a seed for the random number engine
std::mt19937 gen(rd()); // Standard mersenne_twister_engine seeded with rd()
std::uniform_real_distribution<> dis(1.0, 2.0);
for (int n = 0; n < 10; ++n)
// Use dis to transform the random unsigned int generated by gen into a
// double in [1, 2). Each call to dis(gen) generates a new random double.
std::cout << dis(gen) << ' ';
std::cout << '\n';
}
上述代码首先创建了一个用于生成随机数的seed,再创建了一个以rd为seed的随机数生成器,最后使用映射器将随机数以均匀分布映射到[1.0,2.0)的范围上。对于正太分布,则使用normal_distribution分布器。
资料来源