Как сохранить / восстановить 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;
}

Вот возможный вывод

1442642936
----
1503923883
----
3268552048

Я ожидал, что два последних числа будут одинаковыми. Очевидно, мне не удалось написать и / или прочитать мой mt19937. Можете ли вы помочь исправить этот код?

0

Решение

Когда вы открываете свой файл для записи, вы добавляете к существующему файлу. Когда вы читаете его обратно, вы читаете с самого начала.

Предполагая, что вы не хотите сохранять существующий контент, измените открытый вызов на

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

С использованием trunc флаг вместо app будет обрезать существующий файл, поэтому при повторном открытии вы читаете только что записанные данные, а не старые данные, которые уже были там.

1

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]