【问题标题】:How do I save the state of std::mersenne_twister_engine to restore it later?如何保存 std::mersenne_twister_engine 的状态以便以后恢复?
【发布时间】:2013-05-16 14:50:38
【问题描述】:

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

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

【问题讨论】:

    标签: c++ c++11 state mersenne-twister


    【解决方案1】:

    根据this,引擎应支持与标准流的序列化。

    【讨论】:

      【解决方案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
      

      【讨论】:

      • 感谢您的回复;我在考虑更多关于将引擎保存到磁盘/从磁盘保存,但很高兴知道这一点。
      • 糟糕,误解了你的问题。很高兴您找到了答案。
      猜你喜欢
      • 2015-12-31
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-08-03
      • 2013-08-31
      • 2011-01-17
      相关资源
      最近更新 更多