新闻中心
c++如何生成随机数_C++随机数生成器与分布示例
推荐使用C++11的头文件生成随机数,它通过随机数引擎(如std::mt19937)和分布对象(如std::uniform_int_distribution)组合生成高质量随机数。首先用std::random_device初始化引擎以确保种子不同,再配合分布控制范围与类型:整数分布生成[1,100]内随机整数,浮点分布生成[0.0,1.0)间小数。推荐封装为函数并使用static引擎提升性能。相比旧式rand(),避免了周期短、分布偏差和线程不安全等问题,是现代C++首选方案。

在C++中生成随机数,推荐使用 C++11 标准引入的 rand() 函数,<random></random> 能更好地控制随机数的分布和范围,避免常见陷阱。
1. 使用随机数引擎生成基础随机数
随机数引擎(如 std::mt19937)负责生成原始的伪随机数序列。最常用的是梅森旋转算法(Mersenne Twister):
#include <iostream>
#include <random>
int main() {
// 创建一个随机数引擎
std::mt19937 gen(std::random_device{}());
// 生成一个无符号整数范围内的随机值
unsigned int random_num = gen();
std::cout << "随机数: " << random_num << std::endl;
return 0;
}
std::random_device{} 是一个真随机数种子源,用于初始化引擎,保证每次运行结果不同。
2. 使用分布控制随机数范围和类型
仅有引擎还不够,需配合分布对象来生成指定范围或类型的随机数。
整数分布示例:生成 [1, 100] 的随机整数
std::uniform_int_distribution<int> dist(1, 100); int random_int = dist(gen); std::cout << "1到100之间的随机整数: " << random_int << std::endl;
浮点数分布示例:生成 [0.0, 1.0) 的随机浮点数
Reachout.ai
一个AI驱动的视频开发平台,专为忙碌的企业家和销售团队打造
142
查看详情
std::uniform_real_distribution<double> dist_real(0.0, 1.0); double random_double = dist_real(gen); std::cout << "0到1之间的随机小数: " << random_double << std::endl;
3. 常见使用模式封装
为方便重复使用,可将引擎和分布封装成函数或类:
// 生成指定范围内的随机整数
int random_range(int min, int max) {
static std::mt19937 gen(std::random_device{}());
std::uniform_int_distribution<int> dist(min, max);
return dist(gen);
}
// 使用示例
int num = random_range(10, 50); // 生成10到50之间的随机数
使用 static 引擎避免频繁构造,提升性能。
4. 避免使用 rand() 的理由
rand() 来自C语言,存在多个问题:
- 随机质量差,周期短
-
RAND_MAX值有限(通常为32767) - 使用
% N易导致分布偏差 - 多线程环境下不安全

C++11 的
基本上就这些。掌握引擎与分布的组合使用,就能灵活生成各种需求的随机数。
以上就是c++++如何生成随机数_C++随机数生成器与分布示例的详细内容,更多请关注其它相关文章!
# 是一个
# 大同抖音营销推广招聘
# 新品牌推广营销策略研究
# 晋中搜索seo公司
# 松江区专业网站优化费用
# 网站推广广告植入
# 推广营销黑话文案
# 高栏港seo推广价格
# 淘宝流量营销推广
# 建设网站
# 金峰辉网站建设
# 头文件
# 单元测试
# c语言
# 的是
# 结构化
# 配置文件
# 绑定
# 推荐使用
# 多线程
# 随机数
# stream
# ios
# c++
# ai
相关栏目:
【
科技资讯46185 】
【
网络学院92790 】
相关推荐:
如何在Promise链中有效终止错误处理后的执行
微信聊天记录怎么加密_微信聊天记录加密方法
蛙漫2台版漫画地址 Manwa2正版网页版链接
J*aScript中针对特定容器内图片动画的实现教程
在Runstone环境中高效处理TasteDive API的JSON数据
poki免费入口快捷访问 poki人气小游戏直接玩站点
AO3网页版合集入口 Archive of Our Own同人作品浏览指南
J*aScriptWebpack优化_J*aScript构建工具实战
mc.js官网登录入口 mc.js官方登录入口最新版
荣耀Play7TPro怎样在信息App置顶客服对话_iPhone荣耀Play7TPro信息App置顶客服对话【优先查看】
Python中高效访问嵌套字典与列表中的键值对
1688商家版怎样分析买家画像精准供货_1688商家版分析买家画像精准供货【供货策略】
抖音网页版平台入口 抖音网页版官网在线访问教程
AWS EC2实例间SQL Server连接超时:安全组配置与故障排除指南
谷歌google账号怎么注册账号 谷歌账号注册官方流程
Golang如何实现状态模式管理对象状态_Golang State模式实现技巧
解决 Vaadin 8 中大文件音频播放与定位时出现的 IOException
解决 MongoDB 聚合查询中对象数组 _id 匹配问题
高德地图总提示网络异常怎么办 高德地图离线导航设置与网络排查方法
Python vgamepad库按键模拟:正确使用XUSB_BUTTON常量
Python:递归比较文件夹内容并找出特定类型文件的差异
冬*霸灯泡不亮怎么办_浴霸取暖灯一盏不亮的灯座清洁修复法
红果短剧网页版官网入口 官方最新网址发布
Python中高效且防溢出的双曲正弦计算:基于对数空间的优化策略
QQ邮箱网页版入口页面 QQ邮箱在线登录入口官网
css元素hover动画延迟生效怎么办_使用animation-delay调整触发时间
C++如何解决segmentation fault_C++段错误调试与原因分析
KFC套餐升级怎么获取优惠代码_KFC套餐升级活动与优惠代码获取方法
sublime如何配置Go语言开发环境_sublime搭建Golang编译运行系统
谷歌浏览器如何快速清除某个网站的数据_Chrome网站缓存清理方法
谷歌推RCS信息存档功能:公司可监控员工私密信息!
LINUX下如何进行磁盘分区_fdisk与parted工具在LINUX中的使用对比
深入理解J*a合成构造器:何时以及为何阻止其生成
MAC怎么让Dock栏只显示当前运行的应用_MAC终端命令实现极简Dock栏
微信网页版官方入口教程 微信网页版网页版快速登录步骤
新三国志曹操传110级星符试炼夏侯渊极难攻略
将HTML动态表格多行数据保存到Google Sheet的教程
Descript怎样用AI剪辑自动去噪_Descript用AI剪辑自动去噪【自动降噪】
内存检查:在VS Code中调试C++时的内存视图
Mac怎么使用表情符号_Mac Emoji快捷键面板
Win11 USB传输速度慢怎么解决 Win11 USB驱动更新与设置
mc.js免安装版 mc.js一键畅玩入口
c++如何实现一个简单的软件渲染器_c++从零开始的3D图形学
实现全屏滚动与导航点:专业教程
漫蛙2正版漫画站 漫蛙2网页版快速访问入口
Node.js中HTML按钮与J*aScript函数交互的正确姿势
抓大鹅无需下载版 抓大鹅秒玩版入口
qq浏览器打开空白页怎么办 qq浏览器启动后显示白屏的解决教程
QQ邮箱网页版登录入口 QQ邮箱官方在线使用平台
解决Bootstrap卡片顶部边距导致背景图下移的问题


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