📅  最后修改于: 2023-12-03 14:52:15.070000             🧑  作者: Mango
在 C++ 中, mersenne_twister_engine
是 C++11 标准库中提供的随机数生成器,它使用了梅森旋转算法(Mersenne Twister Algorithm)来生成高质量的随机数序列。本文将介绍如何在 C++ 中使用 mersenne_twister_engine
生成随机数。
使用 mersenne_twister_engine
生成随机数的步骤如下:
<random>
头文件。mersenne_twister_engine
的实例。mersenne_twister_engine
实例设置种子。下面是一个使用 mersenne_twister_engine
生成随机数的示例代码:
#include <random>
#include <iostream>
int main()
{
// 创建一个 mersenne_twister_engine 实例
std::mt19937 engine;
// 为引擎设置种子,通常使用现在的时间作为种子
engine.seed(std::time(nullptr));
// 使用引擎生成随机数
std::uniform_int_distribution<int> dist(0, 100);
for (int i = 0; i < 10; ++i) {
std::cout << dist(engine) << std::endl;
}
return 0;
}
上面的示例代码中,使用 std::mt19937
创建了一个 mersenne_twister_engine
实例,并将当前时间作为种子通过 engine.seed()
方法设置到引擎中。然后,使用 std::uniform_int_distribution
创建了一个均匀分布的随机数生成器 dist
,它可以用来生成指定范围内的随机整数。通过 dist(engine)
方法,就可以使用引擎生成随机数。
使用 mersenne_twister_engine
生成随机数时,我们通常会通过 engine.seed()
来设置种子,但有时我们可能需要重置随机数状态,即使种子相同,也能够生成一个新的随机数序列。这时,可以使用 engine.discard(n)
方法,将引擎的状态向前推进 n
步,来达到重置随机数状态的目的。
下面是使用 engine.discard(n)
方法重置随机数状态的示例代码:
#include <random>
#include <iostream>
int main()
{
std::mt19937 engine;
engine.seed(std::time(nullptr));
// 生成 10 个随机数
std::uniform_int_distribution<int> dist(0, 100);
for (int i = 0; i < 10; ++i) {
std::cout << dist(engine) << std::endl;
}
// 重置随机数状态,再生成 10 个随机数
engine.discard(10);
for (int i = 0; i < 10; ++i) {
std::cout << dist(engine) << std::endl;
}
return 0;
}
在上面的示例代码中,先使用引擎生成了 10 个随机数,然后调用 engine.discard(10)
重置了引擎的随机数状态,再次使用引擎生成 10 个随机数时,得到的是一个全新的随机数序列。
本文介绍了如何在 C++ 中使用 mersenne_twister_engine
生成随机数。使用 mersenne_twister_engine
,可以生成高质量的随机数序列,同时,也提供了重置随机数状态的方法,方便在需要的时候回到随机数序列的起点。