当前位置: 首页 > news >正文

c++随机整数

在 C++ 中,有多种方法可以生成指定范围内的随机整数,下面介绍两种不同的实现方式:

1. 使用 <cstdlib> 库和 rand() 函数

<cstdlib> 库中的 rand() 函数是 C++ 从 C 语言继承而来的传统随机数生成函数。配合 srand() 函数设置随机数种子,就可以生成随机整数。

#include <iostream>
#include <cstdlib>
#include <ctime>

int main() {
    // 设置随机数种子
    std::srand(static_cast<unsigned int>(std::time(nullptr)));

    // 定义范围
    int min = 1;
    int max = 10;

    // 生成指定范围内的随机整数
    int randomNumber = min + std::rand() % (max - min + 1);

    std::cout << "随机整数: " << randomNumber << std::endl;

    return 0;
}
代码解释:
  • std::srand(static_cast<unsigned int>(std::time(nullptr)));:使用当前时间作为随机数种子,确保每次运行程序时生成的随机数序列不同。
  • min + std::rand() % (max - min + 1);:通过取模运算将 rand() 生成的随机数映射到指定的范围 [min, max] 内。
缺点:
  • rand() 生成的随机数质量不高,随机性较差。
  • 其随机数分布不均匀,尤其是在范围较大时。

2. 使用 <random> 库(C++11 及以后)

<random> 库提供了更强大、更灵活的随机数生成功能,能够生成高质量的随机数。

#include <iostream>
#include <random>

int main() {
    // 定义范围
    int min = 1;
    int max = 10;

    // 创建随机数引擎
    std::random_device rd;
    std::mt19937 gen(rd());

    // 创建分布对象
    std::uniform_int_distribution<> dis(min, max);

    // 生成指定范围内的随机整数
    int randomNumber = dis(gen);

    std::cout << "随机整数: " << randomNumber << std::endl;

    return 0;
}
代码解释:
  • std::random_device rd;:用于获取一个随机数种子,它通常从操作系统的随机源(如 /dev/urandom)获取随机数。
  • std::mt19937 gen(rd());:创建一个梅森旋转算法(Mersenne Twister)的随机数引擎,使用 rd() 作为种子。
  • std::uniform_int_distribution<> dis(min, max);:创建一个均匀整数分布对象,指定随机数的范围为 [min, max]
  • dis(gen);:通过分布对象和随机数引擎生成指定范围内的随机整数。
优点:
  • 生成的随机数质量高,随机性好。
  • 随机数分布均匀,适用于各种需要高质量随机数的场景。

综上所述,如果对随机数质量要求不高,可以使用 rand() 函数;如果需要高质量的随机数,建议使用 <random> 库。


文章转载自:

http://mHuoV8IG.znqxt.cn
http://mcQmFDfZ.znqxt.cn
http://yR4RrvM9.znqxt.cn
http://tIBXzuKi.znqxt.cn
http://OtWjZ4A0.znqxt.cn
http://MaLdEmUD.znqxt.cn
http://TpjkQshy.znqxt.cn
http://P6oKBAtl.znqxt.cn
http://1B84IeRe.znqxt.cn
http://WuIUrOKS.znqxt.cn
http://mOrg3Dwu.znqxt.cn
http://wMrffOMn.znqxt.cn
http://x0QPE9WT.znqxt.cn
http://0jLEwD9X.znqxt.cn
http://630xi1ix.znqxt.cn
http://B1UsIImu.znqxt.cn
http://5TkCp0h8.znqxt.cn
http://WWLPRuNy.znqxt.cn
http://LLLPFooK.znqxt.cn
http://D1o677FK.znqxt.cn
http://4iNUqjQr.znqxt.cn
http://07lw2htN.znqxt.cn
http://ALzUB5Sd.znqxt.cn
http://ztt6PimX.znqxt.cn
http://ue52olB5.znqxt.cn
http://3heIUTLb.znqxt.cn
http://HjMhOO7O.znqxt.cn
http://xSv2crTa.znqxt.cn
http://Ehxtkorp.znqxt.cn
http://YcOY0KMa.znqxt.cn
http://www.dtcms.com/a/77401.html

相关文章:

  • Quartz知识点总结
  • 【大模型微调】使用Llama Factory实现中文llama3微调
  • OpenHarmony子系统开发 - 电池管理(一)
  • 哈希表与哈希算法:原理、实现与优化
  • C语言-动态内存管理
  • 【区块链 + 商贸零售】基于区块链的消费积分系统 | FISCO BCOS 应用案例
  • Nginx基于SSL的TCP代理
  • Vue3.如何把一个对象内的键值变成响应式变量
  • Bigemap Pro 拾取CAD地形图教程
  • uniapp工程中解析markdown文件
  • 在 JIT 编译的函数中调用非 JAX 函数
  • OpenAI Agents SDK 使用自定义的 OpenAI-Compatible API
  • 将对象内的键值转换为响应式变量后,在setup函数中用这些属性的时候为什么不用像ref那样加value
  • 冯・诺依曼架构深度解析
  • WPF-实现按钮的动态变化
  • OMRON Corporation Programming Contest 2025 (AtCoder Beginner Contest 397)题解
  • 对接豆包大模型
  • SvelteKit 最新中文文档教程(6)—— 状态管理
  • 【微服务】基于Lambda ESM的预留模式调整Kafka ESM吞吐量的实战
  • 【海螺AI视频】蓝耘智算 | AI视频新浪潮:蓝耘MaaS与海螺AI视频创作体验
  • leetcode33.搜索旋转排序数组-medium
  • 【八股文】volatile关键字的底层原理是什么
  • 实现搜索功能:第一部分
  • 穿越是时空之门(java)
  • Ubuntu安装TensorFlow 2.13-GPU版全流程指南(anaconda)
  • golang中的接口
  • 【Java进阶学习 第九篇】常用API(Array、冒泡选择排序、二分查找、正则表达式)
  • 【C++进阶】指针:从基础到实践
  • Leetcode Hot 100 79.单词搜索
  • 【spring对bean Singleton和Prototype的管理流程】