📜  创建随机向量 c++ (1)

📅  最后修改于: 2023-12-03 15:07:13.212000             🧑  作者: Mango

创建随机向量 C++

在编写 C++ 程序时,常常需要生成随机向量。C++ 为我们提供了众多生成随机向量的函数和类。在本篇文章中,我们将向您介绍 C++ 中几种创建随机向量的方法,帮助您在编写程序时更加高效地生成随机向量。

使用 rand() 函数

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() 函数

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;
}

这段代码的输出结果是每次不一样的,因为序列是随机生成的。

使用随机分布类(Random Distribution)

在 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 中。