首页 > 后端开发 > C++ > 正文

C++如何生成随机数_C++ rand函数与C++11 random库的使用

裘德小鎮的故事
发布: 2025-12-05 17:31:02
原创
393人浏览过
C++中生成随机数推荐使用C++11 random库,因其随机性好、分布均匀且功能丰富;传统rand()函数虽简单但存在分布不均、随机性弱等缺点,适用于简单场景,新项目应优先选用random库。

c++如何生成随机数_c++ rand函数与c++11 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;
}

缺点:

TabTab AI
TabTab AI

首个全链路 Data Agent,让数据搜集、处理到深度分析一步到位。

TabTab AI 279
查看详情 TabTab AI
  • 随机数分布不均匀,尤其取模后低端值概率偏高
  • 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库的使用的详细内容,更多请关注php中文网其它相关文章!

最佳 Windows 性能的顶级免费优化软件
最佳 Windows 性能的顶级免费优化软件

每个人都需要一台速度更快、更稳定的 PC。随着时间的推移,垃圾文件、旧注册表数据和不必要的后台进程会占用资源并降低性能。幸运的是,许多工具可以让 Windows 保持平稳运行。

下载
来源:php中文网
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
最新问题
开源免费商场系统广告
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新 English
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送
PHP中文网APP
随时随地碎片化学习

Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号