随机数

一、srand()&rand()

srand用来设计生成随机数的种子,参数为uint32_t,无返回值。rand用来生成随机数,无参数。

#include <iostream>

int main()
{

	//srand(ungigned int)参数不一样才可以生成不一样的随机数,
	//不然每次执行程序生成的随机数和上次程序运行生成的一样
	//time(nullptr) 返回的是当前系统时间,一直在变
	srand(static_cast<unsigned int>(time(nullptr)));
	for(int i = 0;i<10;i++)
	{
		std::cout << rand() % 50 << "	";  //[0,50) 即 0 <= x < 50
	}
	std::cout << std::endl;
	for (int j = 0; j < 10; j++)
	{
		std::cout << rand() % 20 - 10 << "	";  //[-10,10)
	}
	std::cout << std::endl;
	for (int k = 0; k < 10; k++)
	{
		//RAND_MAX = 0x7FFF
		//rand()产生一个[0,0x7FFF]即0-32767之间的随机数
		std::cout << rand() / static_cast<double>(RAND_MAX+1) << "	"; //[0,1)浮点数
	}
	return 0;
}

二、random&srandom

C++11随机数

C++11随机数

中文标准库:伪随机数生成,包含多种随机数引擎以及分布

uniform_real_distribution生成的随机数类型

float、double、long double

uniform_int_distribution生成的随机数类型

int、unsigned、short、unsigned short、long、unsigned long、long long、unsigned long long

#include <iostream>
#include <random>
#include <chrono>

int main()
{
	//参数表示生成随机数的种子,种子不同每次运行程序生成的随机数才能不同
	std::default_random_engine generator1(static_cast<uint32_t>(std::chrono::system_clock::now().time_since_epoch().count()));
	std::default_random_engine generator2(static_cast<uint32_t>(time(nullptr)));

	std::default_random_engine generator;  //使用默认种子,每次运行程序生成的随机数相同
	std::uniform_int_distribution<int> distribution1(0, 255);  //生成[0,255]之间的int型随机数

	std::uniform_real_distribution<float> distribution2(0.0f, 1.0f);  //生成[0,1]之间的随机float值

	for (int i = 0; i < 10; i++)
	{
		std::cout << distribution1(generator);  // 0-255

		std::cout << distribution2(generator1) << "
";

		std::cout << 1 + (int)(10.0 * (rand() / (RAND_MAX + 1.0))) << " ";  //[1,10]  不要使用rand()%10
	}
}

C++时间:time

打乱容器元素的顺序

std::random_shuffle, std::shuffle

原文地址:https://www.cnblogs.com/mmmmmmmmm/p/14581001.html