如何在C++中生成随机值的向量?
在C++中生成随机值的向量可以使用STL库中的随机数发生器。STL库中的随机数发生器具有多种类型和参数,其中最常用的是Mersenne Twister算法,也称为MT19937。本文将介绍如何使用MT19937随机数发生器在C++中生成随机值的向量。
生成随机值的向量
在使用MT19937随机数发生器前,需要引入随机数头文件<random>
。接着,可以定义一个MT19937随机数发生器和一个分布器,分布器可以生成不同范围内的随机数。我们可以将分布器定义为生成以0为中心,半径为100的一千个随机数。
#include <iostream>
#include <random>
#include <vector>
using namespace std;
int main()
{
mt19937 rng;
rng.seed(random_device()());
uniform_int_distribution<int> dist(-100, 100);
vector<int> random_vector;
for (int i = 0; i < 1000; ++i) {
random_vector.push_back(dist(rng));
}
上述代码中,mt19937
采用默认 seed。为了获取真正的随机数据,程序利用random_device()
在运行期获取真正的随机数据;通过调用seed
方法,将获取到的随机数据整数值作为当做seed值以初始化随机数生成器。
在这段代码中,我们使用了uniform_int_distribution
函数,生成整数分布,其中min、max参数分别表示在这个范围内会随机生成整形值,左闭右闭的区间。需要注意的是,如果你想在其他类型的元素上进行此操作,则需要相应不同类型的分布函数。
最后,使用for循环向向量中填充数据。此时,向量random_vector
中包含由MT19937随机数发生器生成的一千个值不同的整数,随机生成的整数的范围在[-100, 100]
之间。
为了使输出更易读,我们检查一些例子的随机向量――
cout << random_vector[0] << " " << random_vector[1] << " " << random_vector[2] << endl;
输出结果:
56 -6 -60
结论
生成随机值的向量是一项在C++中广泛使用的任务。可以使用STL库中的MT19937算法来生成随机向量,并可以根据需要调整范围和生成的项数。该算法随机数生成器的种子可以被设置,以便在需要重复随机数序列的情况下可以获得相同的随机数序列。