📅  最后修改于: 2023-12-03 15:07:13.212000             🧑  作者: Mango
在编写 C++ 程序时,常常需要生成随机向量。C++ 为我们提供了众多生成随机向量的函数和类。在本篇文章中,我们将向您介绍 C++ 中几种创建随机向量的方法,帮助您在编写程序时更加高效地生成随机向量。
rand() 函数是 C++ 中生成随机数的标准函数。它可以生成介于 0 和 RAND_MAX 之间的随机整数值。RAND_MAX 是一个预定义常量,表示 rand() 函数所能生成的最大随机数值。为了生成随机向量,我们可以将 rand() 函数放置在 for 循环内,多次调用。
#include <iostream>
#include <vector>
#include <cstdlib>
#include <ctime>
using namespace std;
int main()
{
// 初始化随机数种子
srand(time(NULL));
// 生成 10 个随机数
vector<int> v;
for (int i = 0; i < 10; i++) {
v.push_back(rand());
}
// 输出随机数向量
cout << "随机向量为:";
for (int i = 0; i < v.size(); i++) {
cout << v[i] << " ";
}
return 0;
}
我们可以使用 srand() 函数来初始化随机数种子。通过将当前时间作为参数传递给 srand() 函数,使得每次生成的随机数序列都是不同的。然后,我们使用 for 循环在生成随机数序列的同时,将元素添加到 vector 中。
random_shuffle() 函数是 C++ 中标准库中的一个函数,它可以将一个 vector 中的元素随机打乱。使用这个函数可以很方便地生成随机向量。
#include <iostream>
#include <vector>
#include <algorithm> // random_shuffle()
#include <ctime>
using namespace std;
int main()
{
// 初始化随机数种子
srand(time(NULL));
// 生成初始向量
vector<int> v;
for (int i = 0; i < 10; i++) {
v.push_back(i);
}
// 将初始向量打乱
random_shuffle(v.begin(), v.end());
// 输出随机数向量
cout << "随机向量为:";
for (int i = 0; i < v.size(); i++) {
cout << v[i] << " ";
}
return 0;
}
这段代码的输出结果是每次不一样的,因为序列是随机生成的。
在 C++11 中,标准库提供了多个随机分布类,可以用来生成特定的分布类型的随机数。其中最常用的是 uniform_int_distribution 类和 uniform_real_distribution 类。
uniform_int_distribution 可以生成在指定范围内均匀分布的随机整数。uniform_real_distribution 可以生成在指定范围内均匀分布的随机实数。
下面是一个使用 uniform_int_distribution 生成随机向量的例子。
#include <iostream>
#include <vector>
#include <random>
using namespace std;
int main()
{
// 随机数生成器和分布类
random_device rd;
mt19937 gen(rd());
uniform_int_distribution<> dis(1, 10);
// 生成随机向量
vector<int> v;
for (int i = 0; i < 10; i++) {
v.push_back(dis(gen));
}
// 输出随机数向量
cout << "随机向量为:";
for (int i = 0; i < v.size(); i++) {
cout << v[i] << " ";
}
return 0;
}
在这个例子中,我们使用了 random_device,它是一个随机数种子生成器。通过将 random_device 作为参数传递给 mt19937 类(mersenne_twister_engine 类的一种实现)的构造函数,我们创建了一个随机数生成器对象 gen。然后,我们使用 uniform_int_distribution 类定义了一个均匀分布的随机整数分布。通过在 for 循环中调用这个分布,我们可以生成一组随机整数,将它们添加到 vector 中。