如何在 C++ 中生成 1 到 10 之间的随机数

2024年8月28日 | 阅读 4 分钟

在许多编程应用程序中,生成随机数是一项常见的需求,C++ 提供了几种方法来生成给定范围内的随机数。在本文中,我们将探讨在 C++ 中生成 1 到 10 之间随机数的不同方法。

方法 1

使用 rand() 函数

在 C++ 中生成 1 到 10 之间随机数的最简单方法之一是 **_rand()_** 函数。此函数在 **_<cstdlib>_** 头文件中定义,并在 **_0_** 到 **_RAND_MAX_** 范围内生成一个随机整数。**_RAND_MAX_** 的值取决于实现,并且可能因编译器而异。

示例

让我们举一个使用 rand() 函数生成 1 到 10 之间随机数的例子,我们可以使用以下代码

输出

Random number between 1 and 10 is: 
4 5 7 10 7 5 1 7 10 2 

在此代码中,我们包含了 **_<cstdlib>_** 和 **_<ctime>_** 头文件。**_srand()_** 函数用于使用当前时间作为种子初始化随机数生成器。它确保每次程序运行时都会生成一个新的随机数序列。

**_rand()_** 函数用于生成 0 到 **_RAND_MAX_** 之间的随机整数。为了将范围限制在 1 到 10 之间,我们将此数除以 10 的余数,并加 1。

方法 2

使用 C++11 随机库

**_C++11_** 标准引入了一个名为 **_<random>_** 的新库,它提供了一种更好的生成随机数的方法。此库提供了多种随机数生成引擎和分布,可以生成具有均匀分布的随机数。

示例

让我们举一个使用 **_<random>_** 库生成 1 到 10 之间随机数的例子,我们可以使用以下代码

在此代码中,我们包含了 **_<random>_** 头文件。**_random_device_** 类用于为随机数生成器获取种子值。**_mt19937_** 类是一个随机数生成引擎,它生成具有均匀分布的随机数。**_uniform_int_distribution_** 类用于生成给定范围内的随机整数。

默认情况下,**_mt19937_** 引擎使用种子值 **_5489_**,可以使用 **_seed()_** 方法更改。但是,建议使用 **_random_device_** 获取种子值以获得更好的随机性。

**_uniform_int_distribution_** 类在给定范围内生成具有均匀分布的随机整数。在此代码中,我们使用构造函数将范围指定为 **_1_** 到 **_10_**。

与 **_rand()_** 函数相比,此方法提供了更好的随机性和生成的数字的均匀分布。但是,它的实现速度较慢且更复杂。

方法 3

使用带 time() 的模运算符

生成 1 到 10 之间随机数的另一种方法是使用 **_模运算符_** 和当前时间作为种子值。此方法类似于使用 **_rand()_** 函数的第一种方法,但它使用更随机的种子值并提供更好的随机性。

示例

让我们举一个使用带 **_time()_** 的模运算符生成 1 到 10 之间随机数的例子,我们可以使用以下代码

输出

Random number between 1 and 10 is: 
6 6 3 6 10 10 1 7 6 4

在此代码中,我们使用了 **_time()_** 函数获取当前时间作为 **_srand()_** 函数的种子值。**_srand()_** 函数用于初始化随机数生成器。**_rand()_** 函数生成 0 到 **_RAND_MAX_** 之间的随机整数,然后使用 **_模运算符_** 并加 1 将其限制在 1 到 10 之间。

结论

总之,在 C++ 中生成 1 到 10 之间随机数有几种方法。方法的选择取决于应用程序的要求,例如生成数字的**_速度、随机性_**和**_均匀性_**。虽然 **_rand()_** 函数最简单且最易于实现,但它可能无法提供良好的随机性和均匀性。**_<random>_** 库提供了一种更好的生成具有均匀分布的随机数的方法,但它的实现速度较慢且更复杂。**_XORShift_** 算法提供了良好的**_随机性_**和**_均匀性_**,但它的实现更复杂,并且可能不如 **_rand()_** 函数快。