C++小技巧
c++随机数
在C++11中,可以使用新引入的std::random
库来生成随机数
- 随机数
#include <iostream>
#include <random>
int main() {
// 创建随机数引擎
std::random_device rd;
std::mt19937 gen(rd());
// 创建均匀实数分布
std::uniform_real_distribution<double> dis(0.0, 1.0);
// 生成随机数
double randomNumber = dis(gen);
std::cout << "Random number: " << randomNumber << std::endl;
return 0;
}
代码解释:
std::random_device rd;
创建一个真实随机数生成器,用于初始化随机数引擎。std::mt19937 gen(rd());
创建一个合并型矩阵19937随机数引擎,并用random_device
的值作为种子进行初始化。std::uniform_real_distribution<double> dis(0.0, 1.0);
创建一个均匀实数分布对象,用于生成介于0.0和1.0之间的随机实数。double randomNumber = dis(gen);
调用分布对象的dis(gen)
函数,用随机数引擎gen
生成一个符合指定分布的随机数。
- 随机整数
只需将std::uniform_real_distribution<double> dis(0.0, 1.0);
改成std::uniform_int_distribution<int> dis(1, 100);
。 - 要固定C++11中随机数生成器的种子值,只需在创建随机数引擎时手动传入一个固定的值作为种子即可。
#include <iostream>
#include <random>
int main() {
// 设置固定的种子值
unsigned seed = 123456;
// 使用固定种子创建随机数引擎
std::mt19937 gen(seed);
// 创建均匀实数分布
std::uniform_real_distribution<double> dis(0.0, 1.0);
// 生成10个随机数
for (int i = 0; i < 10; i++) {
double randomNumber = dis(gen);
std::cout << randomNumber << " ";
}
std::cout << std::endl;
return 0;
}
在这个示例中,我们首先定义了一个固定的unsigned
类型的种子值seed
为123456。然后,在创建std::mt19937
随机数引擎时,将这个固定的种子值传递给其构造函数,即std::mt19937 gen(seed);
。