C++ 如何在C+中读取多个二进制文件+;不使用boost库的程序
我有可变数量的二进制文件(超过100个)。每个文件都很大,但具有完全相同的浮点数(例如1E8)。某些函数/操作将应用于文件中具有相同下标的浮点数,例如,每个文件中的第10个数字 由于文件的总大小很大,因此先将所有文件读入内存,然后再执行操作是低效的。相反,我想以在线的方式来做这件事C++ 如何在C+中读取多个二进制文件+;不使用boost库的程序,c++,file,boost,C++,File,Boost,我有可变数量的二进制文件(超过100个)。每个文件都很大,但具有完全相同的浮点数(例如1E8)。某些函数/操作将应用于文件中具有相同下标的浮点数,例如,每个文件中的第10个数字 由于文件的总大小很大,因此先将所有文件读入内存,然后再执行操作是低效的。相反,我想以在线的方式来做这件事 vector<string> file (nfiles, file_prefix); vector<shared_ptr<ifstream> > in; for(int g = 0
vector<string> file (nfiles, file_prefix);
vector<shared_ptr<ifstream> > in;
for(int g = 0; g < nfile; ++g){
ostringstream fid;
fid << file_id[g];
file[g] = file[g] + fid.str() + string(".bin");
in.push_back(make_shared<ifstream> (file[g].c_str())); //how to specify ios::binary??
}
vector<float> s(nfiles);
for(int i = 0; i < nlines; ++i){
for(int g = 0; g < nfiles; ++g){
in[g].read((char*) s[g], sizeof(float));
}
// do something with s
}
矢量文件(文件,文件前缀);
矢量输入;
对于(int g=0;g
gin.push_back(std::make_shared<ifstream> (gene_out[g].c_str(), std::ios::binary));
由于您的平台是osx,并且c++11附带了std::make_shared
,请尝试将--std=c++11
添加到clang++参数中。您的意思是因为shared_ptr
,这是当前标准的一部分。@πῥεῖ 我是说make_shared。@HanZhang请看@helsinki中的std::make_shared好吗?我尝试了包括但得到了相同的错误:调用“make_shared”时没有匹配的函数。我在mac下编译它,但也希望它能在unix操作系统上工作。关于一起使用make_shared和stream的任何参考都是great@HanZhang伊格您正在使用clang++,因为c++11附带了std::make_shared
,请尝试将--std=c++11
添加到clang++参数中
explicit ifstream (const char* filename, ios_base::openmode mode = ios_base::in);