C++ std::mt19937 类17 Mar 2025 | 4 分钟阅读 在本文中,您将学习 C++ 中 std::mt19937 类的语法、参数和示例。 在 C 语言中,我们使用 rand() 和 srand() 等函数,而在 C++ 中,我们使用 std::rand() 和 std::srand()。为了符合现代 C++ 标准,有更多高级的随机数生成器可用。其中有 32 位 Mersenne Twister std::mt19937 和 64 位 Mersenne Twister std::mt19937_64,由 Matsumoto 和 Nishimura 分别于 1998 年和 2000 年开发。 标准 ::MT19937(C++11 起)类定义在随机头文件中,是一个非常高效的伪随机数生成器。它使用知名且广泛使用的 Mersenne Twister 方法生成 32 位伪随机数。std::mersenne_twister_engine 类本质上是 std::mt19937 类的一个子集。 std::mt19937 随机数生成器显示在 C++17 标准及更高版本的标题中。它使用 Mersenne Twister 算法生成伪随机数,状态大小为 19937 位,位长为 32。因此,它被称为 mt19937,64 位版本的名称为 mt19937_64。两者都显示为 mersenne_twister_engine 的示例。 语法这里,mt1 是 mt19937 类的一个实例,以及获取整个序列所需的种子值。 名称 mt19937 的重要性2^19937 - 1,或 mt19937,长期以来有一个名为 Mersenne Twister 的计算机程序,它生成一个 32 位数字序列,在生成 2^19937 - 1 之前不会重复。 rand() & srand() 与 mt19937 的比较Std::mt19937 完成两件事。
程序让我们举一个例子来说明 C++ 中的 std::mt19937 类。 输出 ![]() 为什么不使用 rand() 而要使用 mt19937?尽管 rand() 函数 对于现实世界中相似的随机数来说完全低效,但它的表现并不好。rand() 生成的随机数重复可以被任何人针对,这相当危险。另一方面,std::mt19937 提供以下优点。
程序 让我们再举一个例子来说明 C++ 中的 std::mt19937 类。 输出 ![]() 说明 它的成员函数与 mersenne_twister_engine 相同,因为它是 std::mersenne_twister_engine 类的一个副本。以下是一些最重要的成员函数列表。 1. (构造函数):构造 mt19937。获取一个种子序列对象(类似于 srand() 函数)或种子类型的种子值。 程序 输出 ![]() 2. min():返回零,这是 operator() 可以返回的最小值。 程序 让我们再举一个例子来说明在 C++ 中使用 min() 函数的 std::mt19937 类。 输出 ![]() 3. max():它返回 operator() 可以返回的最大值 (2^32 - 1 = 4294967295)。 程序 让我们再举一个例子来说明在 C++ 中使用 max() 函数的 std::mt19937 类。 输出 ![]() 4. seed():此函数通过种子序列对象或结果类型的种子值进一步修改对象的种子值。 程序 让我们再举一个例子来说明在 C++ 中使用 seed() 函数的 std::mt19937 类。 输出 ![]() 5. operator():它生成伪随机整数(类似于函数 rand())。 程序 让我们再举一个例子来说明在 C++ 中使用 operator() 的 std::mt19937 类。 输出 ![]() |
在本文中,我们将讨论一个用于生成长度为 n 的 Lyndon 单词的 C++ 程序。在进行实现之前,我们必须了解 Lyndon 单词。什么是 Lyndon 单词?Lyndon 单词是字符串,它们非空且具有比自身更小的词典顺序的特征...
阅读 4 分钟
在 C++ 中添加两个数字是一项基本操作,并且是许多更复杂的算术运算的基础。它在许多方面都很重要。首先,两个数字相加是一项基本的数学运算,在日常生活中被用作……
阅读 3 分钟
双端队列,或双端队列,是序列容器,可提供在开头和结尾的高效插入和删除(Cormen 等人,2009)。与 vector 类似,双端队列允许通过索引位置访问元素。但是,它们在几个关键方面有所不同。首先,虽然 vector 保证……
阅读 4 分钟
在本文中,我们将讨论友元函数和虚函数之间的区别。但在讨论它们的区别之前,我们必须了解 C++ 中的友元函数和虚函数。什么是友元函数?在 C++ 编程语言中,友元函数是...
5 分钟阅读
在本文中,您将了解 C++ 中的 std::stoll 函数及其语法和示例。std::stoll() 是什么?C++ 标准模板库 (STL) 包含 std::stoll() 函数,该函数专门用于将字符串转换为长整型数字。在处理...时非常有用。
阅读 4 分钟
命令行参数是编程中的一个基本概念,它允许开发人员在执行程序时向程序提供输入参数。在 C++ 中,main 函数可以接受命令行参数,使程序员能够创建更通用和交互式的应用程序。在本文中,我们将深入探讨...
阅读 4 分钟
在本文中,我们将讨论协程、用途、实现、示例和输出。什么是协程?协程是一类控制结构,其中控制流在不停止的情况下从一个例程传输到另一个例程。C++20 版本引入了 C++ 协程功能。协程是一种方法...
7 分钟阅读
在本文中,我们将讨论 C++ 中的原地算法字符串转换,并提供几个示例。在此算法中,将给定字符串中所有偶数位置的元素移到字符串末尾。保持所有放置的元素相对顺序不变...
阅读9分钟
程序员在编程时经常需要循环和迭代。有时,有必要遍历一个范围未知的数字序列;在这些情况下,std::integer_sequence 会派上用场。用户可以使用 C++14 的 std::integer_sequence 函数在编译时构造一个整数序列。在运行之前,...
阅读 3 分钟
unordered_multimap rehash(N) 函数在 C++ 中将容器中的元素数量增加到 n 或更多。如果 n 大于容器中的元素数量,则需要重新哈希。新元素计数可能等于或大于...
阅读 3 分钟
我们请求您订阅我们的新闻通讯以获取最新更新。
我们提供所有技术(如 Java 教程、Android、Java 框架)的教程和面试问题
G-13, 2nd Floor, Sec-3, Noida, UP, 201301, India