2017-11-30 13 views
0

は、ここに私の試みシーケンスが繰り返されるようにmt19937を保存/取り出す方法は?

using namespace std; 

int main() 
{ 
    mt19937 mt(time(0)); 

    cout << mt() << endl; 
    cout << "----" << endl; 

    std::ofstream ofs; 
    ofs.open("/path/save", ios_base::app | ifstream::binary); 
    ofs << mt; 
    ofs.close(); 

    cout << mt() << endl; 
    cout << "----" << endl; 

    std::ifstream ifs; 
    ifs.open("/path/save", ios::in | ifstream::binary); 
    ifs >> mt; 
    ifs.close(); 

    cout << mt() << endl; 

    return 0; 
} 

はここで私は2つの最後の番号が同じであることが予想可能な出力

1442642936 
---- 
1503923883 
---- 
3268552048 

です。明らかに、私はmt19937の書き込みや読み込みに失敗しました。このコードの修正を手伝ってもらえますか?

+0

ファイルへの書き込み/読み取りに成功しましたか?あなたは成功を確認しませんでした。あなたが決して 'ofs'を閉じることはないので、あなたは' ifs'を開くことができませんでした。 –

+0

私はコードを編集しました。問題は残っていた。ありがとう –

答えて

1

書き込み用にファイルを開くと、既存のファイルに追加されます。それを読んだら、最初から読んでいます。

truncフラグを使用する代わりにapp

ofs.open("/path/save", ios_base::trunc | ifstream::binary); 

にオープン呼び出しを変更、既存のコンテンツを保存しないと仮定すると、あなたがそれを再度開くときに、あなたが読んでいる、既存のファイルが切り捨てられますあなたが書き込んだデータには既に存在していた古いデータではありません。

+0

問題は本当にmt19937オブジェクトを扱うことと無関係でした。どうもありがとう。 –

関連する問題