您的位置:首页 > 编程语言 > C语言/C++

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

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

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

闲话不说,下面是过程。参考了CPP官网

以及C++ : mt19937 Example

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

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

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

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

std::mt19937 rand_generator(seed) ;


从此就直接可以用 rand_generator() 来得到一个32位整数

(类比于
srand(seed) ;rand()
)

构造满足特定范围分布对象

定义一个分布函数:

std::uniform_int_distribution<int> dist( 6 , 666)


传入随机生成器,调用范围分布对象

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

故使用
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 ;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  C++11