c++ - 写入和读取随机数状态到文件

标签 c++ random state ofstream

我正在尝试按如下方式保存随机数生成器的状态:

std::mt19937 rng
std::ofstream ofile("RngState.txt");
ofile << rng;
ofile.close();

我观察到状态是一个包含 1248 个数字的 vector ,文件中只写入了 624 个数字。有没有一种方法可以一次写入和读取所有 1248 个数字(我想我正在尝试增加 ofstream 的容量/大小)。

提前致谢。

最佳答案

正如@knivil 所说,状态只能用 624 个数字表示。请告诉我们您是如何观察到 1248 的?

VS 2015

编辑:

我与这段代码的结果一致,你能运行它并检查一下吗?

#include <fstream>
#include <random>
#include <iostream>

std::mt19937 deser(std::string fname)
{
  std::ifstream f{fname, std::ifstream::binary};
  std::mt19937  res;
  f >> res;
  return res;
}
void ser(std::string fname, std::mt19937 rng)
{
  std::ofstream f(fname, std::ofstream::binary);
  f << rng;
}

void printRand(std::mt19937 rng)
{
  std::uniform_int_distribution<> uid{1, 100};
  std::cout << uid(rng) << std::endl;
}

int main()
{
  auto fname{"R:\\RngState.txt"};

  std::mt19937 rng{std::random_device{}()};
  ser(fname, rng);
  printRand(rng);

  rng = deser(fname);
  printRand(rng);

  return 0;
}

关于c++ - 写入和读取随机数状态到文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35991714/

相关文章:

c++ - 如果我们使用 SFINAE 匹配类型,则完全失败

c++ - 在多文件程序中使用 "curiously recurring template pattern"

c++ - 奇怪的错误。在循环中使用 rand() 和数组

python - 保存程序的状态以允许它被恢复

c++ - 实现细节继承?

c++ - 为什么带有花括号初始化器列表的构造函数/虚拟析构函数不起作用?

random - 在JMeter中生成 'Random number'变量

c++创建一个介于0.1和10之间的随机小数

javascript - 键入时防止重新呈现主菜单

redux - 使用 Redux 克隆整个状态还是仅克隆切片?