3

我想保存 a 的状态,std::mersenne_twister_engine以便以后可以准确地恢复它。我知道我可以保存原始种子并调用discard将引擎向前滚动一些步骤,但这需要知道引擎被推进的次数,更不用说向前滚动引擎discard似乎是一种低效的 ( ) 方式。O(N)

如何保存引擎的确切状态?

4

2 回答 2

6

据此引擎应支持标准流的序列化。

于 2013-05-21T18:29:08.850 回答
2

只需使用复制构造函数对其进行复制,然后在您想要恢复保存的状态时进行分配(或使用副本,或者您想要构建代码)。

int main()
{
  mtt19937 engine(10);

  std::cout 
    << engine() << "\n"
    << engine() << "\n"
    << engine() << "\n"
    << engine() << "\n"
    << engine() << "\n\n";

  std::cout << "Making Copy\n\n";

  mtt19937 copy(engine);

  std::cout 
    << engine() << "\n" 
    << engine() << "\n" 
    << engine() << "\n" 
    << engine() << "\n"
    << engine() << "\n";

  std::cout << "----\n";
  engine = copy;

  std::cout 
    << engine() << "\n" 
    << engine() << "\n" 
    << engine() << "\n" 
    << engine() << "\n"
    << engine() << "\n";
}

输出:

266666648
1113235983
1006007037
1572197236
322379391

Making Copy

1241299006
1359151196
1840219852
755708724
110209057
----
1241299006
1359151196
1840219852
755708724
110209057
于 2013-05-21T19:52:36.833 回答