21xrx.com
2024-11-05 18:55:01 Tuesday
登录
文章检索 我的文章 写文章
C++如何实现随机数?
2023-06-27 06:31:02 深夜i     --     --
C++ 随机数 实现

在C++的开发中,我们经常需要使用随机数来模拟一些实际情况,比如游戏中的掉落物品、图像生成等等。那么在C++中,如何实现随机数呢?

C++标准库提供了一个随机数生成器rand()函数,它可以生成一个介于0和RAND_MAX(通常为32767)之间的整数。如果我们需要生成一个1到100之间的随机数,则可以使用如下代码实现:


srand(time(NULL)); //初始化随机数种子

int random = rand() % 100 + 1; //生成1-100之间的随机数

cout << random << endl;

在上面的代码中,我们先使用srand()函数来初始化随机数种子。这个随机数种子是一个整数,它能够影响随机数的生成,如果我们每次使用相同的随机数种子,则生成的随机数序列也会相同。这就是为什么我们需要使用time(NULL)函数,来获取一份当前时间的快照,作为初始化随机数种子的值,以确保每次生成的随机数序列都是不同的。

接着,我们使用rand()函数来生成一个介于0到RAND_MAX之间的随机数。但是,这并不满足我们的需求,因为我们需要生成一个1到100之间的随机数,所以我们需要使用取模运算符%来限制随机数的范围。

最后,我们再加上1,就能够生成一个1到100之间的随机数。

除了使用rand()函数,C++11标准库还提供了一个更为先进的随机数生成器库,即random库。它通过C++11标准加入了一个伪随机数生成器(PRNG),名为mt19937。这个PRNG采用了梅森-特温曼旋转算法,生成的随机数的均匀性和周期性都比rand()函数更好。

使用random库生成随机数的代码如下:


#include <random>

#include <iostream>

int main()

{

  std::random_device rd; //获取一个随机数种子

  std::mt19937 gen(rd()); //使用随机数种子生成一个mt19937 PRNG

  std::uniform_int_distribution<> dis(1, 100); //定义一个1到100之间的均匀分布

  int random = dis(gen); //使用生成的随机数序列生成一个随机数

  std::cout << random << std::endl;

  return 0;

}

在上面的代码中,我们首先使用random_device类获取一个随机数种子。然后,使用这个种子来生成一个mt19937 PRNG,这个PRNG对象就可以生成一个均匀分布的随机数序列。接着,我们使用uniform_int_distribution类来定义一个1到100之间的均匀分布,并使用这个分布来生成一个随机数。最后,我们输出这个随机数即可。

总结一下,C++中实现随机数有两种方式:使用rand()函数或者使用random库。在rand()函数中,我们需要手动调用srand()函数来初始化随机数种子,确保随机数序列的不同。而在random库中,我们不需要手动初始化随机数种子,它会自动通过random_device类来获取一个随机数种子,从而生成不同的随机数序列。对于需要高质量随机数的应用可以考虑采用random库。

  
  

评论区

{{item['qq_nickname']}}
()
回复
回复