c++ store vector<vector<float>> in file and reverse

方案来源:
https://stackoverflow.com/questions/15707537/how-to-save-vectorvectorvectorfloat-in-a-file-and-retrieve-data

解决方法:

#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<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<float>> &features, string filename){
    ifstream in(filename.c_str());
    boost::archive::binary_iarchive ia(in); 
    ia >> features;    
    in.close();
}

同时再编译过程中加入相应的boost库
ex:g++ -std=c++11 -o test Test.cpp **-L/usr/local/lib -lboost_iostreams -lboost_serialization**

方法2:

void saveVector(std::string path, const vector<vector<float> >& myVector)
{
    std::ofstream FILE(path, std::ios::out | std::ofstream::binary);

    // Store size of the outer vector
    int s1 = myVector.size();
    FILE.write(reinterpret_cast<const char *>(&s1), sizeof(s1));    

    // Now write each vector one by one
    for (auto& v : myVector) {         
        // Store its size
        int size = v.size();
        FILE.write(reinterpret_cast<const char *>(&size), sizeof(size));

        // Store its contents
        FILE.write(reinterpret_cast<const char *>(&v[0]), v.size()*sizeof(float));
    }
    FILE.close();   
}

void readVector(std::string path,  vector<vector<float> >& myVector)
{
    ifstream FILE(path, std::ios::in | std::ifstream::binary);

    int size = 0;
    FILE.read(reinterpret_cast<char *>(&size), sizeof(size));
    myVector.resize(size);
    for (int n = 0; n < size; ++n) {
        int size2 = 0;
        FILE.read(reinterpret_cast<char *>(&size2), sizeof(size2));
        float f;        
        for ( int k = 0; k < size2; ++k ) {
            FILE.read(reinterpret_cast<char *>(&f), sizeof(f));
            myVector[n].push_back(f);   
        }
    }
}

来源:https://stackoverflow.com/questions/43230542/write-vectorvectorfloat-to-binary-file

以上两种方法,具体消耗时间未测试。

序列化资料:
https://www.ibm.com/developerworks/cn/aix/library/au-boostserialization/

http://blog.csdn.net/lanxuezaipiao/article/details/24845625

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值