C++中生成随机数推荐使用C++11 random库,因其随机性好、分布均匀且功能丰富;传统rand()函数虽简单但存在分布不均、随机性弱等缺点,适用于简单场景,新项目应优先选用random库。

在C++中生成随机数,主要有两种方式:使用传统的 rand() 函数和现代的 C++11 random 库。前者来自C语言标准库,简单但存在局限;后者功能更强大、分布更均匀,推荐在新项目中使用。
使用 rand() 函数生成随机数
rand() 是 cstdlib 头文件中的函数,返回一个0到RAND_MAX之间的整数(通常为32767)。要生成指定范围内的随机数,常用取模运算。
注意:srand() 必须调用一次来设置种子,否则每次程序运行都会得到相同的“随机”序列。
示例代码:
立即学习“C++免费学习笔记(深入)”;
#include#include iostream>
#include
int main() {
srand(static_cast
int random_num = rand() % 100; // 生成 0~99 的随机数
std::cout return 0;
}
缺点:
- 随机数分布不均匀,尤其取模后低端值概率偏高
- RAND_MAX 值较小,随机性有限
- 线程安全性差
- 缺乏对分布类型的支持(如正态分布)
使用 C++11 random 库(推荐)
C++11 引入了
- 引擎(Engine):如 std::mt19937,梅森旋转算法,生成高质量伪随机数
- 分布(Distribution):定义随机数的分布方式,如均匀分布、正态分布等
- 种子生成器(可选):如 std::random_device,用于生成真随机种子
示例:生成 1~100 的均匀分布整数
#include#include
int main() {
std::random_device rd; // 真随机种子源
std::mt19937 gen(rd()); // 随机数引擎
std::uniform_int_distribution
int random_num = dis(gen);
std::cout return 0;
}
支持多种分布类型:
-
std::uniform_real_distribution
:生成浮点型均匀分布 -
std::normal_distribution
:正态分布 - std::bernoulli_distribution:伯努利分布(true/false)
如何选择?
如果只是写个小测试或学习用途,rand() 足够简单。但在实际开发、科学计算或需要高质量随机性的场景中,C++11 random 库是首选。它不仅提供更好的随机性,还能精确控制分布形态,代码也更清晰易读。
基本上就这些。新项目尽量用 random 库,老代码维护时注意 rand() 的坑。










