[C++]Sync_with_stdio

HyunDong Lee·2021년 1월 20일
0

C++

목록 보기
4/6

cout, cin 실행 속도 높이기

문제를 풀때 사실 printf, scanf를 이용하게 되면 연산자 사용이 줄어들어서 시간이 cout, cin을 사용할 때보다 비교적 절감된다는 사실을 알고 있습니다. 컴파일 속도에서 차이가 나기 때문인데, PS를 할때 특히 이런 문제는 예민한 문제이기 때문에 글을 통해서 한 번 간략하게 알아 보았습니다.
cout, cin을 계속 이용하지만 printf, scanf 성능을 내고 싶을 때는 아래와 같이 행하면 된다.

ios_base::sync_with_stdio(false);

ios_base::sync_with_stdio(false); 를 이용하면 cpp의 iostream을 c의 stdio와 동기화 시켜준다고 합니다. 즉 iostream과 c에서 사용하던 stdio를 모두 사용하기 때문에 시간이 지연됩니다. 위 함수는 이런 동기화를 끊어주게 됩니다. c++에서의 버퍼로만 이용하고 c의 버퍼는 사용하지 않게 되는 것 입니다.

cin.tie(0); cout.tie(0);

디폴트로 항상 cin과 cout은 tie 되어 있습니다.
예를 들어서 cout << "hello"; cin >> n;을 하게 되면 티폴트의 경우 "hello"가 먼저 출력되고 name을 입력할 것입니다. 하지만 untie하게 되면 cout으로부터 cin을 untie하기 때문에 먼저 입력을 하게 됩니다.
하지만 "hello"는 보이지 않는데, cout은 디폴트로 출력 명령이나 버퍼가 비어있지 않을 때 flush되고 출력을 하기 때문입니다. 즉 cin을 cout에서 untie하고 싶다면 cin으로 입력하기 전에 cout으로 출력을 할 때마다 지속적으로 flush를 해주게 됩니다. 그렇게 한다면 cout을 해준후 cin을 하고 싶을 때 그 순서에 맞게 출력을 해주게 됩니다.

0개의 댓글