获取C ++ 0x随机数生成器状态的标准方法是什么?

时间:2011-02-28 12:36:46

标签: c++ random c++11

我正在尝试学习随机数生成器(26.5)的新C ++ 0x方法,并在符合C ++ 0x的随机数引擎(26.5.1.4)上实现。

该标准详细介绍了种子序列所需的接口,以及如何将它们传递给引擎的构造函数或seed函数。

但是,我找不到任何标准接口来从引擎创建或生成种子序列,从而获得其内部状态。有吗?或者只能通过复制构造/赋值或复制初始种子序列在引擎之间复制状态?

如果不可能,是否有人知道不提供此类界面的理由是什么(如果有的话)?

3 个答案:

答案 0 :(得分:7)

没有用于从引擎状态生成种子或种子序列的API。但是,引擎的状态可以流入istream,并从流中提取。并且引擎的状态是EqualityComparable与另一个引擎的状态(对于相同类型的引擎)。

有人可能会检查通过将引擎流式传输到它而生成的istream。但是,istream的格式未指定。

答案 1 :(得分:0)

这也是我的理解。 (需要明确的是:我认为状态只能通过复制构造/赋值在引擎之间复制,或者使用相同的初始种子序列构建并生成相同数量的伪随机数。)

答案 2 :(得分:0)

内部状态不必像种子序列那样。我认为这几乎要求编译器从二进制文件中获取源代码。不可能。

您可以复制整个引擎,然后让副本再次重新生成相同的序列。或者您可以将状态流式传输到文件,然后重新加载。