一、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
中文标准库:伪随机数生成,包含多种随机数引擎以及分布
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
}
}