我正在尝试学习随机数生成器(26.5)的新C ++ 0x方法,并在符合C ++ 0x的随机数引擎(26.5.1.4)上实现。
该标准详细介绍了种子序列所需的接口,以及如何将它们传递给引擎的构造函数或seed
函数。
但是,我找不到任何标准接口来从引擎创建或生成种子序列,从而获得其内部状态。有吗?或者只能通过复制构造/赋值或复制初始种子序列在引擎之间复制状态?
如果不可能,是否有人知道不提供此类界面的理由是什么(如果有的话)?
答案 0 :(得分:7)
没有用于从引擎状态生成种子或种子序列的API。但是,引擎的状态可以流入istream,并从流中提取。并且引擎的状态是EqualityComparable与另一个引擎的状态(对于相同类型的引擎)。
有人可能会检查通过将引擎流式传输到它而生成的istream。但是,istream的格式未指定。
答案 1 :(得分:0)
这也是我的理解。 (需要明确的是:我认为状态只能通过复制构造/赋值在引擎之间复制,或者使用相同的初始种子序列构建并生成相同数量的伪随机数。)
答案 2 :(得分:0)
内部状态不必像种子序列那样。我认为这几乎要求编译器从二进制文件中获取源代码。不可能。
您可以复制整个引擎,然后让副本再次重新生成相同的序列。或者您可以将状态流式传输到文件,然后重新加载。