Я проверил сравнение производительности двух нижеприведенных программ на C ++. Одна программа загружает строки в строку путем конкатенации строк. Еще один загружает строки в буфер ostringstream.
По строке:
string mytext = "0123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789";
string res;
clock_t tStart = clock();
for(size_t i=0;i<10000000;++i) { res += mytext; }
fprintf(stderr,"Time taken To Load: %.2fs\n", (double)(clock() - tStart)/CLOCKS_PER_SEC);
tStart = clock();
cout<<res<<endl;
fprintf(stderr,"Time taken To Print: %.2fs\n", (double)(clock() - tStart)/CLOCKS_PER_SEC);
Результат:
Time taken To Load: 3.31s
Time taken To Print: 1.37s
Автор Ostringstream:
string mytext = "0123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789";
clock_t tStart = clock();
std::ostringstream buffer;
for(size_t i=0;i<10000000;++i) { buffer<<mytext; }
fprintf(stderr,"Time taken To Load: %.2fs\n", (double)(clock() - tStart)/CLOCKS_PER_SEC);
tStart = clock();
cout<<buffer.str()<<endl;
fprintf(stderr,"Time taken To Print: %.2fs\n", (double)(clock() - tStart)/CLOCKS_PER_SEC);
Результат:
Time taken To Load: 2.55s
Time taken To Print: 2.97s
Из приведенного выше результата двух программ я обнаружил, что загрузка данных в строковом добавлении происходит медленнее, чем в ostringstream. Но при выводе результата на печать ostringstream потребовалось больше времени, чем на печать строки.
Мой вопрос: как сократить время загрузки данных в строковом потоке и печати данных с помощью ostringstream? Есть ли другой способ сделать этот процесс быстрее, чем эти два метода?