У меня есть переменные числа двоичных файлов (более 100). Каждый файл является огромным, но имеет точно такое же количество чисел с плавающей точкой (например, 1E8). Некоторые функции/операции будут применены к номерам с плавающей запятой с одним и тем же индексом среди файлов, например, 10-й номер в каждом файле.как читать несколько двоичных файлов в программе на C++ без использования библиотеки boost
Поскольку общий размер файлов большой, поэтому неэффективно сначала читать все файлы в памяти, а затем выполнять операцию. Вместо этого я хочу сделать это в режиме онлайн.
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
}
Код выше не работает, так как я не знаю, как определить ИОС :: Binary при создании потока для каждого файла. Он используется, чтобы показать, что я хочу. Кроме того, это зависит от библиотеки boost, которая не разрешается использовать в моем проекте. Я хочу изучить решение без использования boost.
Редактировать: в соответствии с комментариями в этой теме, я узнал, что повышение не требуется, даже если я использую make_shared
. Я до сих пор не понимаю, почему я получил ошибку no matching function for call to 'make_shared'
в строке in.push_back(...)
Edit: Ошибка компиляции из-за опечатки в моем коде. Итак, все мои вопросы в этом потоке решены.
Вы имеете в виду, что это зависит от boost, из-за 'shared_ptr'? Тем временем это часть текущего стандарта. –
@ πάνταῥεῖ Я имел в виду make_shared. –
@HanZhang см. Std :: make_shared в –
helsinki