您好, 我想存储二进制一个std::vector<std::vector<int> >
对象MATRIX在文件中。二进制读/写任意的std ::矢量<性病::矢量<int>>在C++
out.write((char*)&MATRIX, sizeof(MATRIX));
问题是,只有列维度是固定的。行维度更改。 如果我从二进制文件中读取对象,仅仅知道尺寸是不够的,不是吗?所以,初始化例如的第二矩阵与
std::vector<std::vector<int> > MATRIX2;
for (int i=0;i<column_dim;i++) MATRIX2.push_back (vector<int> (0));
ifstream in(cstr, ios::in | ios::binary);
和读取对象数据与
ifstream in(cstr, ios::in | ios::binary);
in.read((char*)& MATRIX2, fSize);
是没有意义的,因为编译器不具有关于所保存的数据的结构的线索。 我的问题: 解决这个问题比第二个文件中保存矩阵结构(关于行尺寸的所有信息)有什么更好的解决方法,读取它并创建一个MATRIX2和适当的结构,然后用
ifstream in(cstr, ios::in | ios::binary);
in.read((char*)&nn_H_test, fSize);
?
是给定的文件格式?如果不是,也许你想看看http://www.boost.org/doc/libs/1_46_1/libs/serialization/doc/index.html。这应该会让你很容易存储和加载int的矩阵。 – mkaes 2011-05-27 12:44:45
扩展我在http://stackoverflow.com/questions/3438132/serialise-and-deserialise-vector-in-binary/3438541#3438541中建议的协议,在每个存储矩阵前添加一个size_t来指定第一维。 – bobah 2011-05-27 12:46:56
哎哟,你是否试图在文件上做一个原始的'std :: vector'转储?这将*永远不会*工作,读回来你会得到一个完全混乱的状态的对象(唯一正确的事情可能是矢量大小,但指向元素的内部指针将是无效的)。你需要正确的序列化。 – 2011-05-27 12:52:35