c++如何生成随机数 c++ random库使用方法【技巧】
发布时间 - 2025-12-29 00:00:00 点击率:次推荐使用C++11的库,以std::random_device初始化std::mt19937引擎,配合uniform_int_distribution等分布类生成高质量随机数,避免rand()及其缺陷。
在 C++ 中生成高质量随机数,推荐使用 C++11 引入的 库,它比传统的 rand() 更可靠、更灵活、分布更均匀。
初始化随机数生成器(推荐用 std::random_device)
std::random_device 是真正的硬件级随机数源(在支持系统上),适合做种子。不要直接用它大量生成随机数(可能慢或耗尽熵),而是用来初始化其他引擎:
- 用
std::random_device{}()获取一个种子值 - 传给
std::mt19937(梅森旋转算法,速度快、周期长、质量高) - 避免写成
std::mt19937 gen(time(0))—— 秒级精度容易重复
选择合适的分布类(控制范围和类型)
引擎只负责“生成位”,真正决定数值范围和分布的是 分布类。常用组合:
- 整数区间:
std::uniform_int_distribution(含两端)(min, max) - 浮点区间:
std::uniform_real_distribution(含 low,不含 high)(low, high) - 正态分布:
std::normal_distribution(mean, stddev) - 注意:分布对象可复用,不必每次新建;它不保存状态,线程安全
完整示例:生成 [1, 100] 的随机整数
以下代码简洁、安全、符合现代 C++ 实践:
#include#include int main() { std::random_device rd; // 真随机种子源 std::mt19937 gen(rd()); // 初始化 Mersenne Twister std::uniform_int_distribution dis(1, 100); // [1, 100] 均匀整数 for (int i = 0; i < 5; ++i ) { std::cout << dis(gen) << " "; // 每次调用 dis(gen) 产生一个新数 } return 0; }
常见误区与技巧
避开老式陷阱,提升健壮性:
- 别再用
srand(time(0)); rand() % N—— 分布不均、低比特劣质、不可移植 - 如果需要多个独立随机序列(如多线程),每个线程用独立的
gen实例 + 不同种子 - 想复现结果?用固定种子初始化
std::mt19937 gen(42)(调试/测试有用) - 分布对象可绑定引擎:
auto dice = std::bind(dis, gen);,之后直接调用dice()
# ai
# c++
# ios
# stream
# auto
# int
# double
# 线程
# 多线程
# 对象
# 算法
# 随机数
# 推荐使用
# 高质量
# 的是
# 正态分布
# 多个
# 浮点
# 不含
# 再用
# 速度快
相关栏目:
【
网站优化151355 】
【
网络推广146373 】
【
网络技术251813 】
【
AI营销90571 】
相关推荐:
Python正则表达式进阶教程_复杂匹配与分组替换解析
如何在云主机上快速搭建网站?
DeepSeek是免费使用的吗 DeepSeek收费模式与Pro版本功能详解
成都网站制作公司哪家好,四川省职工服务网是做什么用?
如何在橙子建站中快速调整背景颜色?
怎么制作一个起泡网,水泡粪全漏粪育肥舍冬季氨气超过25ppm,可以有哪些措施降低舍内氨气水平?
Laravel如何使用Scope本地作用域_Laravel模型常用查询逻辑封装技巧【手册】
国美网站制作流程,国美电器蒸汽鍋怎么用官方网站?
如何快速搭建安全的FTP站点?
原生JS获取元素集合的子元素宽度实例
如何彻底删除建站之星生成的Banner?
Java垃圾回收器的方法和原理总结
胶州企业网站制作公司,青岛石头网络科技有限公司怎么样?
Laravel队列任务超时怎么办_Laravel Queue Timeout设置详解
如何用手机制作网站和网页,手机移动端的网站能制作成中英双语的吗?
Laravel Eloquent关联是什么_Laravel模型一对一与一对多关系精讲
如何在企业微信快速生成手机电脑官网?
微信公众帐号开发教程之图文消息全攻略
最好的网站制作公司,网购哪个网站口碑最好,推荐几个?谢谢?
Laravel API资源类怎么用_Laravel API Resource数据转换
HTML5空格和nbsp有啥关系_nbsp的作用及使用场景【说明】
Android中AutoCompleteTextView自动提示
简单实现Android验证码
VIVO手机上del键无效OnKeyListener不响应的原因及解决方法
Python文件操作最佳实践_稳定性说明【指导】
车管所网站制作流程,交警当场开简易程序处罚决定书,在交警网站查询不到怎么办?
大型企业网站制作流程,做网站需要注册公司吗?
Laravel如何使用API Resources格式化JSON响应_Laravel数据资源封装与格式化输出
智能起名网站制作软件有哪些,制作logo的软件?
Laravel怎么解决跨域问题_Laravel配置CORS跨域访问
Laravel如何保护应用免受CSRF攻击?(原理和示例)
中国移动官方网站首页入口 中国移动官网网页登录
谷歌浏览器下载文件时中断怎么办 Google Chrome下载管理修复
网站制作报价单模板图片,小松挖机官方网站报价?
如何快速上传建站程序避免常见错误?
在centOS 7安装mysql 5.7的详细教程
JavaScript如何实现音频处理_Web Audio API如何工作?
如何安全更换建站之星模板并保留数据?
php读取心率传感器数据怎么弄_php获取max30100的心率值【指南】
如何用PHP快速搭建CMS系统?
JavaScript如何实现倒计时_时间函数如何精确控制
Laravel如何发送邮件_Laravel Mailables构建与发送邮件的简明教程
七夕网站制作视频,七夕大促活动怎么报名?
Laravel怎么使用Blade模板引擎_Laravel模板继承与Component组件复用【手册】
mc皮肤壁纸制作器,苹果平板怎么设置自己想要的壁纸我的世界?
Laravel Vite是做什么的_Laravel前端资源打包工具Vite配置与使用
Laravel如何发送系统通知_Laravel Notifications实现多渠道消息通知
ChatGPT常用指令模板大全 新手快速上手的万能Prompt合集
手机钓鱼网站怎么制作视频,怎样拦截钓鱼网站。怎么办?
Laravel如何配置Horizon来管理队列?(安装和使用)


) {
std::cout << dis(gen) << " "; // 每次调用 dis(gen) 产生一个新数
}
return 0;
}