📜  c++ 范围内的随机数 - C++ (1)

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

C++ 范围内的随机数

在 C++ 中,我们可以利用标准库中的随机数生成器来生成随机数。标准库中提供的随机数生成器有两种,分别是伪随机数生成器和真随机数生成器。

其中,伪随机数生成器是利用某一种特定的算法生成随机数序列,它是预测性的,也就是说,它生成的随机数序列是可以重复的。真随机数生成器则是通过 真正的物理随机事件 生成随机数序列,具有不可预测性,也就是说,它生成的随机数序列是不可重复的。

在实际应用中,我们大多数情况下会使用伪随机数生成器。

伪随机数生成器
srand 函数

在使用伪随机数生成器前,我们需要先种下一个随机数种子,以保证生成的随机数是随机的。

这时,我们就可以使用 srand 函数来为随机数生成器种下随机数种子。srand 函数需要传入一个参数,这个参数就是随机数种子。一般情况下,我们可以使用时间戳作为随机数种子,以保证每次运行程序时,生成的随机数序列是不同的。

#include <iostream>
#include <cstdlib>
#include <ctime>

int main() {
    std::srand(std::time(nullptr));
    // ...
    return 0;
}
rand 函数

随机数种子种下后,我们就可以使用 rand 函数生成随机数了。rand 函数会返回一个 [0, RAND_MAX] 范围内的随机整数。

#include <iostream>
#include <cstdlib>
#include <ctime>

int main() {
    std::srand(std::time(nullptr));
    for(int i = 0; i < 5; i++) {
        std::cout << std::rand() << std::endl;
    }
    return 0;
}

我们可以使用 % 运算符来将生成的随机数控制在指定的范围内。例如,如果我们想生成 [1, 6] 范围内的随机整数,可以这样写:

std::cout << std::rand() % 6 + 1 << std::endl; // [1, 6]
C++11 随机数库

C++11 中引入了 头文件,其中提供了更加灵活的随机数生成方式。我们可以通过 头文件中的类来生成不同分布下的随机数。

下面是一个使用 头文件生成正态分布下随机数的例子:

#include <iostream>
#include <random>

int main() {
    std::default_random_engine e; // 默认随机数生成器
    std::normal_distribution<double> n(0, 1); // 正态分布
    for(int i = 0; i < 5; i++) {
        std::cout << n(e) << std::endl; // 生成随机数
    }
    return 0;
}
总结

在 C++ 中,我们可以利用标准库提供的函数和类来生成随机数序列。

我们可以使用 srand 函数种下随机数种子,然后使用 rand 函数生成指定范围内的随机整数。

C++11 中,我们可以使用 头文件中提供的类来生成不同分布下的随机数。