2013-05-21 88 views
2

我想保存一个std::mersenne_twister_engine的状态,以便我可以在以后再将其恢复。我知道我可以拯救原始的种子,并呼吁discard推动发动机前进一些步骤,但这需要知道发动机的先进次数,更不用说discard似乎是一个低效率(O(N))的方式来滚动发动机前进。如何保存std :: mersenne_twister_engine的状态以便稍后恢复?

我该如何去拯救引擎的确切状态?

回答

5

根据this,引擎应该支持序列化进出标准流。

1

只需使用复制构造函数复制它,然后在想要恢复保存的状态(或使用复制或无论您想要构造代码)时进行分配。

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 
+1

感谢您的答复;我正在考虑更多地将引擎保存到磁盘或从磁盘保存引擎,但这很好理解。 – fbrereto

+0

糟糕,误解了你的问题。很高兴你找到答案。 – 2013-05-21 20:54:21

相关问题