随机数在编程中有许多用途,C++提供了几种生成随机数的方法。本文将主要介绍C++中生成随机数的两种方式。
一、rand函数
最基本的生成随机数的方式是使用rand函数:
#include <cstdlib>
int num = rand(); // 生成一个随机整数
rand默认产生一个0到RAND_MAX之间的伪随机数。可以对结果取模来生成指定范围的随机数:
int dice = rand() % 6 + 1; // 摇骰子
rand每次调用都会产生同样的随机数序列,需要调用srand设置随机种子:
srand(time(nullptr)); // 设置随机种子
二、随机数引擎
C++11提供了更好的随机数引擎,定义在头文件中。
默认的随机数引擎是minstd_rand:
#include <random>
std::default_random_engine engine;
int num = engine(); // 产生随机数
三、随机数分布
可以结合随机数分布产生不同范围和分布的随机数:
std::uniform_int_distribution<> distrib(1, 6);
int dice = distrib(engine); // 摇骰子
常见的分布有:均匀、高斯、泊松等分布。
四、种子
要实现可重现的随机序列,需要设置随机数引擎的种子:
engine.seed(10); // 设置种子
五、其它用法
- shuffle 随机排列
- random_shuffle 洗牌算法
熟练使用C++的随机数功能可以轻松实现蒙特卡罗方法、随机算法等应用,是编程很有用的一项技能。