gpt4 book ai didi

c++ - C++ 中的二进制读/写任意 std::vector>

转载 作者:搜寻专家 更新时间:2023-10-31 00:45:45 25 4
gpt4 key购买 nike

你好,我想存储二进制文件 std::vector<std::vector<int> >文件中的对象矩阵。

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);

?

最佳答案

我会给你一个简短的例子来说明如何使用 boost 来做到这一点。 .

#include <iostream>
#include <fstream>
#include <boost/serialization/serialization.hpp>
#include <boost/serialization/vector.hpp>
#include <boost/archive/text_oarchive.hpp>
#include <boost/archive/text_iarchive.hpp>

std::vector<std::vector<int > > g_matrix;
int main(int argc, char* argv[])
{
// fill the vector
std::ofstream ofs("c:\\dump");
boost::archive::text_oarchive to(ofs);
to << g_matrix;

g_matrix.clear();
std::ifstream ifs("c:\\dump");
boost::archive::text_iarchive infs(ifs);
infs >> g_matrix;
// check your vector. It should be the same
}

如果你需要它更易于阅读,你也可以从 boost 中尝试 xml。
一如既往,不要重新发明轮子。

关于c++ - C++ 中的二进制读/写任意 std::vector<std::vector<int>>,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6152312/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com