Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/file/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 如何在C+中读取多个二进制文件+;不使用boost库的程序_C++_File_Boost - Fatal编程技术网

C++ 如何在C+中读取多个二进制文件+;不使用boost库的程序

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

我有可变数量的二进制文件(超过100个)。每个文件都很大,但具有完全相同的浮点数(例如1E8)。某些函数/操作将应用于文件中具有相同下标的浮点数,例如,每个文件中的第10个数字

由于文件的总大小很大,因此先将所有文件读入内存,然后再执行操作是低效的。相反,我想以在线的方式来做这件事

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