新闻中心
C++如何生成指定范围随机数_C++ uniform_int_distribution用法详解
推荐使用uniform_int_distribution配合std::mt19937生成随机数,因rand()存在分布不均、质量差、周期短、非线程安全等问题;通过random_device初始化种子,定义闭区间范围,复用引擎和分布对象,可高效生成均匀随机整数,适用于游戏、抽样、模拟等场景。

在C++中生成指定范围内的随机数,推荐使用 uniform_int_distribution 配合随机数引擎(如 std::mt19937)来实现。这种方法比传统的 rand() 更安全、更均匀,也更现代。
为什么不用 rand()?
虽然 rand() 可以生成随机数,但它存在几个问题:
- 分布不均匀,尤其在取模操作后
- 随机质量差,周期短
- 最大值受限(RAND_MAX 通常为 32767)
- 不是线程安全的
因此,C++11 引入了
uniform_int_distribution 基本用法
std::uniform_int_distribution
基本步骤如下:
- 创建一个随机数引擎(如 std::mt19937)
- 定义 uniform_int_distribution 对象,指定范围 [min, max]
- 用引擎生成随机数,传给 distribution 对象
#include <iostream>
#include <random>
int main() {
// 1. 创建随机数引擎
std::random_device rd; // 真实随机种子
std::mt19937 gen(rd()); // Mersenne Twister 引擎
// 2. 定义分布:生成 [1, 100] 的整数
std::uniform_int_distribution<int> dis(1, 100);
// 3. 生成并输出5个随机数
for (int i = 0; i < 5; ++i) {
int random_num = dis(gen);
std::cout << random_num << " ";
}
std::cout << std::endl;
return 0;
}
关键细节说明
范围是闭区间 [a, b]:uniform_int_distribution 生成的值包含 a 和 b。例如 dis(1, 6) 可能返回 1、2、3、4、5 或 6,适合模拟掷骰子。
N世界
一分钟搭建会展元宇宙
138
查看详情
随机引擎建议用 std::mt19937:它速度快、周期长(约 2^19937),是常用选择。配合 std::random_device 初始化种子,避免每次程序运行得到相同序列。
避免重复创建引擎和分布对象:应将引擎和分布声明为静态或复用,否则可能影响性能或随机性。
常见应用场景
生成指定范围的随机整数非常实用,例如:
- 游戏开发中生成敌人位置:dis(0, 100)
- 随机抽样:dis(0, data.size()-1)
- 模拟掷骰子:dis(1, 6)
- 生成验证码数字:dis(0, 9)
如果需要生成负数范围,也可以直接指定:
std::uniform_int_distribution<int> neg_dis(-10, 10); // [-10, 10]
基本上就这些。使用 uniform_int_distri
bution 能让你的随机数更可靠、更符合预期。不复杂但容易忽略的是种子初始化——用 std::random_device 提高随机性,避免伪随机序列重复。
以上就是C++如何生成指定范围随机数_C++ uniform_int_distribution用法详解的详细内容,更多请关注其它相关文章!
# 复用
# 动态网站建设循环结构
# 淘宝搜索关键词排名规则
# 渝北区网站优化
# 手机免费网站优化哪些好
# 潞城街道网站建设公司
# 湖南网站推广app
# 网站百度推广工作总结
# seo同行竞争词
# 宣汉网站优化公司有哪些
# 大邑网站推广定做
# 周期短
# 的是
# 工具
# 有什么区别
# 如何使用
# 整型
# 推荐使用
# 如何实现
# 随机数
# 为什么
# 游戏开发
# stream
# ios
# c++
# ai
相关栏目:
【
科技资讯46185 】
【
网络学院92790 】
相关推荐:
Python中高效且防溢出的双曲正弦计算:基于对数空间的优化策略
解决Tabulator日期时间排序问题的专业指南
谷歌浏览器如何快速清除某个网站的数据_Chrome网站缓存清理方法
Win11怎么查看显卡显存 Win11显示适配器属性及专用视频内存查询
Bing引擎入口最新2025 Bing搜索免费官方登录
必由学登录入口 必由学官方网站在线访问链接
怎样在Excel中做仪表盘_Excel仪表盘设计与关键指标展示方法
Go语言中的*string:深入理解字符串指针
优化LangChain文档加载与ChromaDB集成:解决多文档处理与分块问题
PDF文件体积过大处理_PDF压缩技巧详解
QQ邮箱官方登录入口_QQ邮箱网页版快捷使用平台
QQ邮箱登录平台入口 QQ邮箱网页版邮箱官方入口
韩小圈电脑版在线入口_网页版免费登录地址
Sublime怎么配置Nim语言环境_Sublime Nim代码高亮与补全
包子漫画官方网站在线链接-包子漫画在线阅读平台主页地址
京东京造J1和网易云音乐氧气真无线有什么不同_国产电商蓝牙耳机音质对比
163邮箱注册官网 免费申请163个人邮箱
Mac怎么查看崩溃日志_Mac控制台错误报告分析
4399免费游戏网址入口 4399小游戏免费入口点开即玩
Django表单验证失败时保留用户输入数据的最佳实践
vivo手机互传视频怎么操作_vivo手机互传视频详细传输方法
星露谷物语官网入口 星露谷物语游戏官网入口
Win11怎么合并任务栏图标 Win11开启任务栏合并减少图标占空间【方法】
Python实时数据流中的动态最值查找策略
Win10系统服务哪些可以禁用 Win10安全优化服务列表【干货】
ACG动漫手机版官网入口 手机ACG动漫APP在线观看正版
React/Next.js中实现列表项的动态移动与状态管理:兼论唯一键的重要性
PySpark中从现有列右侧提取可变长度字符创建新列的教程
Win10快速启动功能利弊分析 Win10开启或关闭快速启动教程【技巧】
Spring Boot嵌入式服务器与J*a EE:功能支持深度解析
如何设置Windows Defender的定时扫描_计划任务实现自动杀毒【安全】
J*aScript实现单选按钮与关联输入框的联动禁用教程
提升Kafka消费者健壮性:会话超时处理与消息处理语义
天眼查企业查询官网入口 天眼查官方网页版查询
痛风发作了怎么办? 快速止痛和后期饮食调理
优化Django表单:提交验证失败后保留用户输入
HTML5原生日期选择器与jQuery UI:实现日期选择器的联动与程序化控制
想当下一个《2077》?《心之眼》Steam评价升至"多半好评"
Win11 USB传输速度慢怎么解决 Win11 USB驱动更新与设置
Yandex搜索引擎一键访问入口_俄罗斯Yandex官网免登录
顺丰快递查询系统 官方正版查询入口
初次安装JDK时环境变量如何正确配置_J*A_HOME与PATH设置规则讲解
Django模型中自动计算可用余额的实现方法
在J*a中如何捕获IndexOutOfBoundsException_索引越界异常防护方法说明
Win11怎么设置鼠标主按键_Win11鼠标左右键功能互换
高德地图家和公司地址在哪设置 高德地图通勤路线设置方法【超详细】
Fabric模组开发:自定义物品与物品组的现代管理方法
Tabulator表格日期时间排序问题及自定义解决方案
mysql密码锁定怎么解锁_mysql密码锁定解锁后修改密码步骤
拼多多视频播放卡顿如何处理 拼多多视频播放优化技巧


2025-11-28
浏览次数:次
返回列表