如何save/retrieve mt19937让序列重复?
How to save/retrieve mt19937 so that the sequence is repeated?
这是我的尝试
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;
}
这是一个可能的输出
1442642936
----
1503923883
----
3268552048
我希望最后两个数字相同。很明显,我已经失败了and/or读我的mt19937。你能帮忙修复这段代码吗?
当您打开文件进行写入时,您是在向现有文件追加内容。当你读回它时,你从头开始读。
假设您不想保留现有内容,请将打开调用更改为
ofs.open("/path/save", ios_base::trunc | ifstream::binary);
使用 trunc
标志而不是 app
将截断现有文件,因此当您重新打开它时,您正在读取刚刚写入的数据,而不是已经存在的旧数据。
这是我的尝试
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;
}
这是一个可能的输出
1442642936
----
1503923883
----
3268552048
我希望最后两个数字相同。很明显,我已经失败了and/or读我的mt19937。你能帮忙修复这段代码吗?
当您打开文件进行写入时,您是在向现有文件追加内容。当你读回它时,你从头开始读。
假设您不想保留现有内容,请将打开调用更改为
ofs.open("/path/save", ios_base::trunc | ifstream::binary);
使用 trunc
标志而不是 app
将截断现有文件,因此当您重新打开它时,您正在读取刚刚写入的数据,而不是已经存在的旧数据。