Если в ваших данных нет ничего особенного, маловероятно, что вы улучшите буферизацию, встроенную в объект std :: fstream.
Объекты std :: fstream спроектированы так, чтобы быть очень эффективными для доступа к файлам общего назначения. Не похоже, что вы делаете что-то особенное, получая доступ к данным 4 байта за раз. Вы всегда можете профилировать свой код, чтобы увидеть, где фактическое время тратится на ваш код.
Может быть, если вы поделитесь кодом с ous, мы можем заметить некоторые существенные недостатки.
Edit:
Мне не нравится твой алгоритм. Поиск назад и вперед может быть затруднен для потока, особенно из-за количества, лежащего за границей буфера. Я бы прочитал только один номер каждый раз в цикле.
Попробуйте это:
Примечание: это не оптимально (и предполагает потоковый ввод чисел (пока ваш выглядит двоичным)) Но я уверен, что вы можете использовать его как отправную точку.
#include <fstream>
#include <iostream>
// Return the current val (that was the smaller value)
// and replace it with the next value in the stream.
int getNext(int& val, std::istream& str)
{
int result = val;
str >> val;
return result;
}
int main()
{
std::ifstream f1("f1.txt");
std::ifstream f2("f2.txt");
std::ofstream re("result");
int v1;
int v2;
f1 >> v1;
f2 >> v2;
// While there are values in both stream
// Output one value and replace it using getNext()
while(f1 && f2)
{
re << (v1 < v2)? getNext(v1, f1) : getNext(v2, f2);
}
// At this point one (or both) stream(s) is(are) empty.
// So dump the other stream.
for(;f1;f1 >> v1)
{
// Note if the stream is at the end it will
// never enter the loop
re << v1;
}
for(;f2;f2 >> v2)
{
re << v2;
}
}