当前位置: 首页 > 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> 库。

相关文章:

  • 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视频创作体验
  • 建设网站的命令/免费数据统计网站
  • 招代理网站建设公司/云速seo百度点击
  • wordpress导购站主题/平台交易网
  • 网站佣金怎么做会计分录/全球网站排名前100
  • 做挂件的网站/搜索大全引擎入口
  • 闵行西安网站建设/东莞seo外包公司