【发布时间】:2013-05-16 14:50:38
【问题描述】:
我想保存std::mersenne_twister_engine 的状态,以便以后可以准确恢复它。我知道我可以保存原始种子并调用discard 将引擎向前滚动一些步骤,但这需要知道引擎被推进的次数,更不用说discard 似乎效率低下(@987654324 @) 使引擎向前滚动的方式。
如何保存引擎的确切状态?
【问题讨论】:
标签: c++ c++11 state mersenne-twister
我想保存std::mersenne_twister_engine 的状态,以便以后可以准确恢复它。我知道我可以保存原始种子并调用discard 将引擎向前滚动一些步骤,但这需要知道引擎被推进的次数,更不用说discard 似乎效率低下(@987654324 @) 使引擎向前滚动的方式。
如何保存引擎的确切状态?
【问题讨论】:
标签: c++ c++11 state mersenne-twister
根据this,引擎应支持与标准流的序列化。
【讨论】:
只需使用复制构造函数对其进行复制,然后在您想要恢复保存的状态时进行分配(或使用副本,或者您想要构建代码)。
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
【讨论】: