c++11随机数产生器default_random_engine
2017-06-15 10:54
225 查看
c++11 随机数产生器 default_random_engine
rand()存在一定的问题,在转换rand随机数的范围,类型或者分布时,常常会引入非随机性。定义在
<random>中的随机数库通过一组协作类来解决这类问题:随机数引擎 和 随机数分布类
一个给定的随机数发生器一直会生成相同的随机数序列。一个函数如果定义了局部的随机数发生器,应该将(引擎和分布对象)定义为 static 的。否则每次调用函数都会生成相同的序列。
随机数发生器会生成相同的随机数序列这一个特性在调试 中很有用。
一旦我们调试完毕,我们通常希望每次运行程序都会生成不同的随机结果,可以通过提供一个 种子 来达到这一目的。
有两种设置种子的方式:
1. 创建引擎对象时提供种子 Engine e(s);
2. 调用引擎的 seed 成员 e.seed(s);
最常用的是调用系统函数 time , 定义在
<ctime>,单位是秒计
default_random_engine e(time(0)); //稍微随机些种子1
1
写个例子:
#include <vector> #include <iostream> #include <random> #include <ctime> std::vector<unsigned> randomGenerate(const unsigned low, const unsigned high) { static std::default_random_engine e(time(0)); static std::uniform_int_distribution<unsigned> u(low, high); std::vector<unsigned> vec; for (int i = 0; i < 10; i++) vec.push_back(u(e)); return vec; } int main() { for (int i = 0; i < 10; i++) { std::vector<unsigned> vec = randomGenerate(0, 30); for (auto &i : vec) std::cout << i << " "; std::cout << std::endl; } return 0; }
相关文章推荐
- c++11随机数产生器default_random_engine
- c++11随机数产生器default_random_engine
- C++11中,获取随机数的新方法default_random_engine
- 原来c++中没有random()函数,而是用rand函数实现产生随机数的功能
- java7新特性——使用ThreadLocalRandom产生并发随机数
- .Net中关于Random类产生的随机数相同问题解决
- JavaSE8基础 Random 使用给定的种子产生随机数
- .net中使用Random()产生一个随机数
- * Random:产生随机数的类 *
- Random产生随机数与Math.random()产生随机数的比较
- JAVA基础MATH类的应用(Random产生自己想要的范围类的随机数解决方案)
- c# Random快速连续产生相同随机数的解决方案
- c# Random太快产生的随机数会重复
- c# Random快速连续产生相同随机数的解决方案
- Random中的随机数的产生机制
- java7新特性——使用ThreadLocalRandom产生并发随机数
- java7新特性——使用ThreadLocalRandom产生并发随机数
- 第0001题 : 产生随机数(顺便读random模块官方文档)
- 让random在极短时间内产生的随机数不相同
- Math.random()随机产生【x,y)的随机数