我想保存 a 的状态,std::mersenne_twister_engine
以便以后可以准确地恢复它。我知道我可以保存原始种子并调用discard
将引擎向前滚动一些步骤,但这需要知道引擎被推进的次数,更不用说向前滚动引擎discard
似乎是一种低效的 ( ) 方式。O(N)
如何保存引擎的确切状态?
我想保存 a 的状态,std::mersenne_twister_engine
以便以后可以准确地恢复它。我知道我可以保存原始种子并调用discard
将引擎向前滚动一些步骤,但这需要知道引擎被推进的次数,更不用说向前滚动引擎discard
似乎是一种低效的 ( ) 方式。O(N)
如何保存引擎的确切状态?
据此,引擎应支持标准流的序列化。
只需使用复制构造函数对其进行复制,然后在您想要恢复保存的状态时进行分配(或使用副本,或者您想要构建代码)。
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