2018년 3월 5일 월요일

C++ cout,cinを早くする

BAEKJOON ONLINE JUDGEをコツコツとやっています。
今年はついにランキング1000位以内に進入でき、意欲ももっと上がりましたが
簡単な問題は会えなくなり毎日1問題の目標ももっと難しくなっています。

問題の難易度=処理速度のケースが多く、c++のcout,cinの代わりにcのprintf,scanfを使ったパスしたんですが良い方法がありました。

1.ios::sync_with_stdio(false); そして改行をendlではなく'\n'で処理
基本的にc++のiostreamとcのstdioの二つのバッファーを同期化処理してそこで遅延が発生するので同期化処理をしないように設定してパフォーマンスが上がることです。
------------------------------------
//default 
for (int i = 0; i < 10; i++)
{
    cout << '1';
    printf("2");
}

>> 12121212121212121212

// ios::sync_with_stdio(false);

ios::sync_with_stdio(false);
for (int i = 0; i < 10; i++)
{
    cout << '1';
    printf("2");
}

>> 22222222221111111111
------------------------------------

2.cin.tie(NULL)
cout
cin
cout
..
基本的に最初のcoutが出力されてcinの入力、そして2番目のcoutが出力されるのをcout.flush()もしくはバッファーがいっぱいになったのみ出力されるように変更するとパフォーマンスがあがることです。

----------
//Default
#include <iostream>
using namespace std;
int main(void)
{
int n;
cout << "Enter number: ";
cin >> n;
cout << n << endl;

    return 0;
}

>>Enter number: が表示され、数字を入力、ENTERを押すと入力した数字を表示

//cin.tie(NULL);
#include <iostream>
using namespace std;
int main(void)
{
ios_base::sync_with_stdio(false);
cin.tie(NULL);
int n;
cout << "Enter number: ";
cin >> n;
cout << n << endl;

    return 0;
}

>>何も表示されない、数字を入力、ENTERを押すと「Enter number:」と入力した数字を表示
----------

댓글 없음:

댓글 쓰기

1、2、QWER! in OSAKA (大阪 2025/4/10(木) Yogibo META VALLEY)

https://www.creativeman.co.jp/event/qwer-osaka/ QWER - CREATIVEMAN PRODUCTIONS 主催:LIVET 企画:ソニー・ミュージックソリューションズ 招聘:クリエイティブマンプロダクション 制作協力:クリエイテ...