2013-05-21 2 views
2

std::mersenne_twister_engine의 상태를 저장하여 나중에 정확하게 복원 할 수 있습니다. 나는 원래 시드를 저장하고을 호출하여 엔진을 몇 단계 앞으로 굴릴 수 있다는 것을 알고 있지만, 엔진이 발전한 횟수에 대한 지식이 필요합니다. 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

질문에 대한 오해. 다행히 대답을 찾았습니다. –