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中的
用种子构建一个随机生成器
从此就直接可以用 rand_generator() 来得到一个32位整数
(类比于
构造满足特定范围分布对象
定义一个分布函数:
传入随机生成器,调用范围分布对象
范围分布对象重载了
故使用
(类比于使用
最后附个代码:
当然,主要还是今天开会,大家都在说要写博客。想想自己一直在搞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 + SDL2 + ffmpeg +OpenAL + java = Android播放器
- 在 Qt4 中使用 C++11
- c++11新特性--decltype auto
- centos安装devtoolset-3支持gcc 4.9.2
- 使用eclipse编译含有C++11特性的代码
- 怎样在Linux环境编译支持C11
- eclipse支持c++11
- C++11可变参数函数与for循环
- vs2013 编译c++是发现惊天bug
- 简单性能测试函数模板
- 关于C++现状的一些思考
- 用C++11优化矩阵运算的空间和时间效率
- 浅析构造函数之默认构造函数
- C++11新特性学习笔记
- c++中返回数组的函数
- C++函数重载的几个问题
- C++11 note-2 字符串 容器 迭代器
- C++11 现代C++风格的新元素
- c++11 lambda表达式浅谈
- C++11之“move”语意