C++ - 随机数生成器(random-number generator) 的 详解 及 代码

原创 2013年12月14日 18:11:26

随机数生成器(random-number generator) 的 详解 及 代码


本文地址: http://blog.csdn.net/caroline_wendy/article/details/17322165


随机数, C语言的函数是rand(), C++则是随机数生成器(random-number generator) = 分布对象(distribution object) + 引擎(engine);

使函数每次生成不同的随机数, 需要使用静态(static)局部变量, 这样分布对象和引擎就能保持(hold)状态(state), 每次都生成一个新的;

生成随机的整数, 使用分布对象uniform_int_distribution<>, 默认模板参数是int;

生成随机的浮点数, 使用分布对象uniform_real_distribution<>, 默认模板参数是double;


代码:

#include <iostream>
#include <vector>
#include <string>
#include <random>


using namespace std;

std::vector<unsigned> good_randVec()
{
	static std::default_random_engine e; //静态
	static std::uniform_int_distribution<unsigned> u(0,9); //静态
	std::vector<unsigned> ret;
	for(size_t i=0; i<10; ++i)
		ret.push_back(u(e));
	return ret;
}

int main()
{
	std::default_random_engine e;
	std::cout << "engine : ";
	for(size_t i=0; i<10; ++i)
		std::cout << e() << " ";
	std::cout << std::endl;

	std::cout << "uniform : ";
	std::uniform_int_distribution<unsigned> u(0, 9); //即[0, 9]
	for(size_t i=0; i<10; ++i)
		std::cout << u(e) << " ";
	std::cout << std::endl;

	std::cout << "min : " << e.min() << " max : " << e.max() << std::endl;

	std::vector<unsigned> v1(good_randVec());
	std::vector<unsigned> v2(good_randVec());
	for(size_t i=0; i<v1.size(); ++i)
		std::cout << v1[i] << " ";
	std::cout << std::endl;
	for(size_t i=0; i<v2.size(); ++i)
		std::cout << v2[i] << " ";
	std::cout << std::endl;

	std::uniform_real_distribution<double> ud(0, 1);
	std::cout << "float : ";
	for(size_t i=0; i<10; ++i)
		std::cout << ud(e) << " ";
	std::cout << std::endl;

	return 0;
}

输出:

engine : 16807 282475249 1622650073 984943658 1144108930 470211272 101027544 1457850878 1458777923 2007237709 
uniform : 3 5 8 0 0 5 6 0 3 0 
min : 1 max : 2147483646
0 1 7 4 5 2 0 6 6 9 
3 5 8 0 0 5 6 0 3 0 
float : 0.686773 0.930436 0.526929 0.653919 0.701191 0.762198 0.0474645 0.328234 0.75641 0.365339 


版权声明:本文为博主原创文章,未经博主允许不得转载。

C++ 利用<cstdlib> 头文件 , 产生一个random number generator

头文件中有一个重要的函数 rand() , 可以作为随机数发生器。 现在现在我想产生一个随机数, 我使用如下的程序: #include #include using namespace std;...
  • a130737
  • a130737
  • 2014年08月13日 21:40
  • 1177

html5游戏开发-愤怒的小鸟-开源讲座(三)-碰撞产生的冲力

在前面已经实现了利用外力将小鸟弹飞出去,并且实现了镜头的跟随。本次来研究一下小鸟与其他物体之间发生碰撞时的冲力,以及由碰撞而使物体发生变形,进而消失,下面是前两讲的链接,看本篇教程之前请朋友们最好先了...

[Python入门及进阶笔记]Python-基础-列表及列表解析小结

  • wklken
  • wklken
  • 2012年12月30日 17:14
  • 17399

随机数产生器(random number generator)

随机数产生器 随机数一般分为真正的随机和伪随机(pseudorandom number generator (PRNG))。真正的随机则是不可预测;伪随机则依靠随机数种子和随机算法,是可能被预测的。...

C++ 自定义随机数生成器的使用 <random> 参照C++11

今天突发奇想,想实现一个64位正整数的,处理数据量在10GB级别的数据处理程序。 在生成随机数的时候遇到了一点小障碍。利用C库实现若使用 srand()/rand() 这样的C函数的话返回的是一个i...

Random Number Generator v1.0

  • 2008年06月09日 20:41
  • 7KB
  • 下载

[Python标准库]random——伪随机数生成器

Python 版本:1.4 及以后版本         random 模块基于 Mersenne Twister 算法提供了一个快速伪随机数生成器。原先开发这个生成器是为了向蒙特卡洛模拟生成输入,M...
  • krzover
  • krzover
  • 2017年03月18日 11:26
  • 316

Java中的随机数生成器:Random,ThreadLocalRandom,SecureRandom .

Random即:java.util.Random, ThreadLocalRandom 即:java.util.concurrent.ThreadLocalRandom SecureRandom即...

使用C#(Random)随机数来制作随机字母数字混合密码生成器

大家好,由于某些原因, 我经常会需要使用一些字母与数字的混合密码你们可能会说: 随便输入一些字母与数字不就好了吗? 没错,对于一般人来说可能没啥关系但对于我这种有强迫症的人来说, 太痛苦了每次要因为想...

Java中的随机数生成器:Random,ThreadLocalRandom,SecureRandom

文中的 Random即:java.util.Random, ThreadLocalRandom 即:java.util.concurrent.ThreadLocalRandom Secure...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:C++ - 随机数生成器(random-number generator) 的 详解 及 代码
举报原因:
原因补充:

(最多只允许输入30个字)