C++11 生成指定范围内的随机数

版权声明:本文为博主原创文章[在个人GitHub上可能有相同技术文档],未经博主允许不得转载。 https://blog.csdn.net/x5942110/article/details/51191167

C++11中使用了一些名字有些难记的一系列函数来生成一个指定范围内随机数,不像C中那样简洁和直观。不过,为了使用标准C++11语法,尽可能抛弃C子集的函数,还是很有必要学习的。

当然,主要还是今天开会,大家都在说要写博客。想想自己一直在搞pages,但是上面大多都是些影评什么的,已经不能当作技术博客了,索性接着写CSDN吧,把一些零散的东西记在这里也是不错的。

闲话不说,下面是过程。参考了CPP官网
以及C++ : mt19937 Example

  1. 用流逝的时间(秒)得到一个种子

    unsigned seed = std::chrono::high_resolution_clock::now().time_since_epoch().count()

    (类比于C中的time(0))

  2. 用种子构建一个随机生成器

    std::mt19937 rand_generator(seed) ;

    从此就直接可以用 rand_generator() 来得到一个32位整数
    (类比于 srand(seed) ;rand())

  3. 构造满足特定范围分布对象
    定义一个分布函数:

    std::uniform_int_distribution<int> dist( 6666)
  4. 传入随机生成器,调用范围分布对象

    范围分布对象重载了 () 调用运算,需要参数即是 随机生成器

    故使用 dist(rand_generator )可以得到满足dist分布的随机数

    (类比于使用 rand函数后再取模的运算)

最后附个代码:

#include <iostream>
#include <random>
#include <chrono>

using namespace std ;

int main(int argc ,  char *argv[] )
{
    unsigned seed = chrono::high_resolution_clock::now().time_since_epoch().count() ;
    mt19937 rand_generator(seed) ;
    uniform_int_distribution<int> dist(6,666) ;
    for(int cnt = 0 ; cnt < 10 ; ++cnt) cout << dist(rand_generator) << endl ;
    return 0 ;
}
阅读更多
相关热词
换一批

没有更多推荐了,返回首页