如何保存vector <vector <vector <float>&gt; &GT;在文件中并检索数据?</vector <vector <float>

时间:2013-03-29 16:42:29

标签: c++ boost

我需要将vector<vector<vector<float> > >的内容保存到文件中,然后在正确的位置检索所有值。

建议?

4 个答案:

答案 0 :(得分:2)

看看boost序列化库。

答案 1 :(得分:2)

如果你想自己做,你可以做这样的事情:

std::ofstream file("floats.bin", std::ios::binary);
std::vector<float> f;
std::size_t n = f.size();

// save the size of the vector so you know how much to read
// when you load from file

file.write( reinterpret_cast<char*>( &n ), sizeof(n) );

// write the data

file.write( reinterpret_cast<char*>( f.data() ), sizeof(float) * n );

您需要为每个内部向量执行此操作。由您决定文件格式的确切细节。但是,请考虑不同大小的数据类型。

要回读数据,您首先要阅读尺寸信息,然后相应地调整矢量大小,然后执行ifstream::read

答案 2 :(得分:1)

您可以将其写入以字节为单位的二进制文件。然后当你再读回来时,你可以将它读回一个char数组并将其转换为你的类型。

查看http://courses.cs.vt.edu/cs2604/fall02/binio.html

答案 3 :(得分:0)

解决了,谢谢

#include <boost/archive/binary_iarchive.hpp>
#include <boost/archive/binary_oarchive.hpp>
#include <boost/serialization/string.hpp> 
#include <boost/serialization/export.hpp> 
#include <boost/serialization/vector.hpp>
#include <boost/serialization/list.hpp>

void saveFeaturesFile(vector<vector<vector<float> > > &features, string filename){ 
    ofstream out(filename.c_str());
    stringstream ss;
    boost::archive::binary_oarchive oa(ss); 
    oa << features;
    out << ss.str();
    out.close();    
}

void loadFeaturesFile(vector<vector<vector<float> > > &features, string filename){
    ifstream in(filename.c_str());
    boost::archive::binary_iarchive ia(in); 
    ia >> features;    
    in.close();
}

并链接-lboost_iostreams -libboost_serialization