c++11随机数产生器default_random_engine
2018-01-17 21:47
260 查看
老版本的rand()#include <stdlib.h> /* srand, rand */
#include <time.h> /* time */
srand((unsigned int)time(NULL));
rand();
c/c++老版本的rand()存在一定的问题,在转换rand随机数的范围,类型或者分布时,常常会引入非随机性。定义在
一旦我们调试完毕,我们通常希望每次运行程序都会生成不同的随机结果,可以通过提供一个 种子 来达到这一目的。有两种设置种子的方式:
1. 创建引擎对象时提供种子 Engine e(s);
2. 调用引擎的 seed 成员 e.seed(s);最常用的是调用系统函数 time , 定义在
#include <time.h> /* time */
srand((unsigned int)time(NULL));
rand();
c/c++老版本的rand()存在一定的问题,在转换rand随机数的范围,类型或者分布时,常常会引入非随机性。定义在
<random>中的随机数库通过一组协作类来解决这类问题:随机数引擎 和 随机数分布类一个给定的随机数发生器一直会生成相同的随机数序列。一个函数如果定义了局部的随机数发生器,应该将(引擎和分布对象)定义为 static 的。否则每次调用函数都会生成相同的序列。随机数发生器会生成相同的随机数序列这一个特性在调试 中很有用。
一旦我们调试完毕,我们通常希望每次运行程序都会生成不同的随机结果,可以通过提供一个 种子 来达到这一目的。有两种设置种子的方式:
1. 创建引擎对象时提供种子 Engine e(s);
2. 调用引擎的 seed 成员 e.seed(s);最常用的是调用系统函数 time , 定义在
<ctime>,单位是秒计
default_random_engine e(time(0)); //稍微随机些种子写个例子:
#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
- RandomStringUtils产生随机数
- Java中利用Math.random()产生服从泊松分布的随机数
- Random产生随机数问题
- java Math.random()随机数的产生
- ORACLE中使用DBMS_RANDOM去产生随机数
- java产生随机数(Math.random())
- 提高c#随机数random产生随机函数的…
- Random快速连续产生不相同随机数
- c++11 随机数random
- linux 随机数的产生/dev/random 和/dev/urandom
- 随机数产生random
- 使用Random函数产生随机数
- Random产生随机数模拟投掷硬币
- <stdlib.h>中的随机数产生函数rand,random,srand,srandom的一些知识
- 产生随机数 random
- linux下C++11产生真随机数
- cryptography 使用RandomNumberGenerator产生加密强随机数