Если честно, я не уверен, но то, что я прочитал, действительно зависит от итераторов. В случае итераторов из файловых потоков у него, вероятно, нет встроенного метода для измерения длины файла между начальным и конечным интегратором.
Если это правильно, он будет работать примерно так же, как удваивает свой внутренний объем памяти каждый раз, когда ему не хватает места. В этом случае для n символов в файле будут выделяться Log [n, 2] памяти и удаляться память, а также n * Log [n, 2] копий отдельных символов поверх простого копирования символов в строку.
Как отметил Грег, вы можете также проверить это. Как он сказал, попробуйте разные размеры файлов для обоих методов. Кроме того, вы можете использовать следующее, чтобы получить некоторые количественные показатели.
#include<time.h>
#include<iostream>
...
clock_t time1=0, time2=0, delta;
float seconds;
time1=clock();
//Put code to be timed here
time2=clock();
delta= time2-time1;
seconds =(((float)delta)/((float)CLOCKS_PER_SEC));
std::cout<<"The operation took: "<<seconds<<" seconds."<<std::endl;
...
это должно сработать для определения времени.