C++11 生成随机数

47 篇文章 2 订阅
14 篇文章 0 订阅

代码链接:https://wandbox.org/permlink/piWyOPiMyG0tggQK

C++11 提供了新的随机数生成方法,随机数的相关类声明都位于<random>头文件中,完整说明可参考:random,此处选择一些常用的总结一下。

std::mt19937是C++11加入的新特性,是一种高效的随机数生成算法。它的用法和rand()相似,但是具有速度快,周期长的特点。它的名字就来自于周期长度2^19937-1。而rand()在windows下生成的数据范围为0-32767。而这个函数的随机范围大概在(-maxint,+maxint)之间。std::mt19937std::mt19937_64,前者是32位的,后者是64位的。

在C语言中,要生成特定分布的随机数并不容易,不过在C++中这就很简单了,C++中提供了各种常用分布的实现,直接调用就可以了。比如最常用的均匀分布的整数:std::uniform_int_distribution;均匀分布的小数:std::uniform_real_distribution;正态分布:std::normal_distribution等。

完整代码如下:

#include <random>
#include <iostream>

int gen_random(int num)
{
    std::random_device rd;     //Get a random seed from the OS entropy device, or whatever
    std::mt19937_64 eng(rd()); //Use the 64-bit Mersenne Twister 19937 generator
    std::uniform_int_distribution<unsigned long long> distr(1, num);// distribution in range [1, num]
    return distr(eng);
    
}

int main() {
    int num = 40;
    for(int i = 0; i < 10; i++)  
    {
        std::cout << gen_random(num) << std::endl;  // random number in range[1, num]
        
    }
    std::cout << std::endl;
}
  • 4
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值