Добавление строки против Ostringstream

Я проверил сравнение производительности двух нижеприведенных программ на 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? Есть ли другой способ сделать этот процесс быстрее, чем эти два метода?


person Smith Dwayne    schedule 12.04.2017    source источник
comment
stackoverflow.com/questions/19844858/   -  person Alexander Anikin    schedule 12.04.2017
comment
Возможный дубликат c ++ std :: ostringstream vs std :: string :: append   -  person cbuchart    schedule 11.10.2019