0

0

c++如何生成一个随机数_c++随机数生成方法与示例

裘德小鎮的故事

裘德小鎮的故事

发布时间:2025-10-21 18:54:02

|

566人浏览过

|

来源于php中文网

原创

现代C++推荐使用头文件生成随机数,1.通过std::mt19937引擎和std::uniform_int_distribution分布生成1到100的整数;2.用std::uniform_real_distribution生成0.0到1.0的浮点数;3.避免使用rand()因分布不均且范围受限;4.调试时可设固定种子使序列可重现。

c++如何生成一个随机数_c++随机数生成方法与示例

在C++中生成随机数有多种方法,现代C++推荐使用头文件中的工具,而不是传统的rand()函数。下面介绍几种常用且可靠的随机数生成方式。

使用 生成高质量随机数

从C++11开始, 提供了更灵活、更均匀的随机数生成机制。核心由两部分组成:随机数引擎(如 std::mt19937)和分布器(如 std::uniform_int_distribution)。

示例:生成一个1到100之间的随机整数

#include 
#include 

int main() {
    std::random_device rd;  // 用于生成种子
    std::mt19937 gen(rd()); // 使用Mersenne Twister引擎
    std::uniform_int_distribution dis(1, 100);

    int random_num = dis(gen);
    std::cout << "随机数: " << random_num << std::endl;

    return 0;
}

说明:

立即学习C++免费学习笔记(深入)”;

  • std::random_device 是真随机数设备,用于初始化种子。
  • std::mt19937 是常用的伪随机数生成器,周期长、质量高。
  • std::uniform_int_distribution 确保生成的数在指定范围内均匀分布。

生成浮点型随机数

若需要生成0.0到1.0之间的随机浮点数,可使用 std::uniform_real_distribution

英特尔AI工具
英特尔AI工具

英特尔AI与机器学习解决方案

下载
std::random_device rd;
std::mt19937 gen(rd());
std::uniform_real_distribution dis(0.0, 1.0);

double random_float = dis(gen);
std::cout << "随机浮点数: " << random_float << std::endl;

使用 rand() 的旧式方法(不推荐)

在早期C++中,常用 rand()srand() 配合 time(0) 来生成随机数。

#include 
#include 
#include 

int main() {
    srand(time(0)); // 设置种子
    int random_num = rand() % 100 + 1; // 1到100
    std::cout << "随机数: " << random_num << std::endl;
    return 0;
}

缺点:

  • rand() 分布不均匀,尤其低位随机性差。
  • RAND_MAX 值有限(通常为32767),范围受限。
  • 多线程下容易出现重复序列。

因此,在新项目中应避免使用 rand()

固定种子用于调试

在调试程序时,可以使用固定种子让随机数序列可重现。

std::mt19937 gen(42); // 固定种子
std::uniform_int_distribution dis(1, 10);
for (int i = 0; i < 5; ++i) {
    std::cout << dis(gen) << " ";
}
// 每次运行输出相同结果

基本上就这些。优先使用 头文件中的现代方法,能获得更好的随机性和控制能力。不复杂但容易忽略细节,比如引擎初始化和分布选择。根据需求选择整数或浮点分布即可。

相关专题

更多
线程和进程的区别
线程和进程的区别

线程和进程的区别:线程是进程的一部分,用于实现并发和并行操作,而线程共享进程的资源,通信更方便快捷,切换开销较小。本专题为大家提供线程和进程区别相关的各种文章、以及下载和课程。

472

2023.08.10

Python 多线程与异步编程实战
Python 多线程与异步编程实战

本专题系统讲解 Python 多线程与异步编程的核心概念与实战技巧,包括 threading 模块基础、线程同步机制、GIL 原理、asyncio 异步任务管理、协程与事件循环、任务调度与异常处理。通过实战示例,帮助学习者掌握 如何构建高性能、多任务并发的 Python 应用。

107

2025.12.24

php源码安装教程大全
php源码安装教程大全

本专题整合了php源码安装教程,阅读专题下面的文章了解更多详细内容。

61

2025.12.31

php网站源码教程大全
php网站源码教程大全

本专题整合了php网站源码相关教程,阅读专题下面的文章了解更多详细内容。

41

2025.12.31

视频文件格式
视频文件格式

本专题整合了视频文件格式相关内容,阅读专题下面的文章了解更多详细内容。

32

2025.12.31

不受国内限制的浏览器大全
不受国内限制的浏览器大全

想找真正自由、无限制的上网体验?本合集精选2025年最开放、隐私强、访问无阻的浏览器App,涵盖Tor、Brave、Via、X浏览器、Mullvad等高自由度工具。支持自定义搜索引擎、广告拦截、隐身模式及全球网站无障碍访问,部分更具备防追踪、去谷歌化、双内核切换等高级功能。无论日常浏览、隐私保护还是突破地域限制,总有一款适合你!

41

2025.12.31

出现404解决方法大全
出现404解决方法大全

本专题整合了404错误解决方法大全,阅读专题下面的文章了解更多详细内容。

198

2025.12.31

html5怎么播放视频
html5怎么播放视频

想让网页流畅播放视频?本合集详解HTML5视频播放核心方法!涵盖<video>标签基础用法、多格式兼容(MP4/WebM/OGV)、自定义播放控件、响应式适配及常见浏览器兼容问题解决方案。无需插件,纯前端实现高清视频嵌入,助你快速打造现代化网页视频体验。

9

2025.12.31

关闭win10系统自动更新教程大全
关闭win10系统自动更新教程大全

本专题整合了关闭win10系统自动更新教程大全,阅读专题下面的文章了解更多详细内容。

8

2025.12.31

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
React 教程
React 教程

共58课时 | 3.1万人学习

Pandas 教程
Pandas 教程

共15课时 | 0.9万人学习

ASP 教程
ASP 教程

共34课时 | 3万人学习

关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

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