C++ベースのstd-stringstream後cout

3403 ワード

通常、coutの前にstringstreamが採用され、直接出力ではありません.
    std::stringstream ss_1;
    ss_1 << "this is ";
    ss_1 << "test.
"; std::cout << ss_1.str() << std::endl;

以下の実験で,実際には直接coutの使用時間はもっと少ないが,systemのioも比較的大きいことが分かったが,なぜstringstreamを先に使用するのか.
なぜなら,我々は当時consoleに直接出力する必要はなく,先に存在し,その後ファイルに送信したり,データベースに送信したりするなど,他の出力を先にstringstream後coutする方式を採用し,アルゴリズムの統一性をより互換性があるからである.
#include 
#include 
#include 
#include 
#include 

int main(void)
{
    std::cout << "Fill:
"         << std::left << std::setfill(' ') << std::setw(12) << -1.23 << std::right << std::setfill(' ') << std::setw(12) << std::hex << std::showbase << 42 << '
'         << std::left << std::setfill(' ') << std::setw(12) << -1.3 << std::right << std::setfill(' ') << std::setw(12) << std::hex << std::showbase << 142 << '
'         << std::left << std::setfill(' ') << std::setw(12) << -1 << std::right << std::setfill(' ') << std::setw(12) << std::hex << std::showbase << 4142 << '
'; auto start = std::chrono::high_resolution_clock::now(); std::chrono::duration sum_diff_1 = start - start; std::chrono::duration sum_diff_2 = start - start; std::chrono::duration sum_diff_3 = start - start; unsigned int idx = 1000; while (idx--) { auto start_1 = std::chrono::high_resolution_clock::now(); std::stringstream ss_1; for (unsigned int i = 0; i < 5; ++i) { ss_1 << "this is test.
"; } std::cout << ss_1.str() << std::endl; auto end_1 = std::chrono::high_resolution_clock::now(); auto start_2 = std::chrono::high_resolution_clock::now(); std::stringstream ss_2; for (unsigned int i = 0; i < 5; ++i) { ss_2 << "this is test." << std::endl; } std::cout << ss_2.str() << std::endl; auto end_2 = std::chrono::high_resolution_clock::now(); auto start_3 = std::chrono::high_resolution_clock::now(); for (unsigned int i = 0; i < 5; ++i) { std::cout << "this is test." << std::endl; } auto end_3 = std::chrono::high_resolution_clock::now(); std::chrono::duration diff_1 = end_1 - start_1; std::chrono::duration diff_2 = end_2 - start_2; std::chrono::duration diff_3 = end_3 - start_3; sum_diff_1 += diff_1; sum_diff_2 += diff_2; sum_diff_3 += diff_3; } std::cout << "ss \
" << sum_diff_1.count() << std::endl; std::cout << "ss endl " << sum_diff_2.count() << std::endl; std::cout << "cout " << sum_diff_3.count() << std::endl; getchar(); return 0; } /* ss
14.6097 ss endl 14.508 cout 13.9853 */