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(time(0))); // 以当前时间作为种子
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 stream>
#include
int main() {
std::random_device rd; // 真随机种子源
std::mt19937 gen(rd()); // 随机数引擎
std::uniform_int_distribution dis(1, 100); // 分布范围 [1, 100]
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() 的坑。
以上就是C++如何生成随机数_C++ rand函数与C++11 random库的使用的详细内容,更多请关注创想鸟其它相关文章!
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 chuangxiangniao@163.com 举报,一经查实,本站将立刻删除。
发布者:程序猿,转转请注明出处:https://www.chuangxiangniao.com/p/1488068.html
微信扫一扫
支付宝扫一扫