C++을 이용하여 알고리즘 문제를 풀다보면 아래 구문을 main 시작 부분에 적어둔 것을 많이 볼 수 있다. 이 구문의 의미에 대해 알아보고자 한다.
ios_base::sync_with_stdio(false);
cin.tie(NULL); cout.tie(NULL);
C++ 표준 스트림과 C 표준 스트림 각각의 입출력 연산의 동기화 여부를 설정한다.
true
C++ 표준 스트림 str이 C 스트림 f와 동기화된다.
C++ 스트림들이 자신의 버퍼를 사용하지 않고 이에 대응하는 C 스트림 버퍼를 사용한다.
C++ 입출력 연산과 C 입출력 연산을 혼용할 수 있다.
C++ 스트림의 쓰레드 안정성을 보장한다.
false
C 표준 stream과 C++ 표준 stream의 동기화를 끊는다.
C++ 스트림이 각각의 입출력 연산에 대해 버퍼 사용한다.
따라서, 입출력 연산 속도가 향상된다.
cin을 cout으로부터 untie한다는 의미이다.
stream이
tie
stream에서 입출력 요청이 오기 전에 stream을 flush 시킨다.
program이 user에게 입력을 요구하기 전에 output flush시키다.
untie
output이 flush되지 않은채로 user에게 입력을 요구한다.
※ cout은 output은 buffer로 가득차거나 flush되기 전까지 출력하지 않는다. 따라서 untie 시, cin으로 입력 받기 전에 출력을 하고 싶다면 수동적으로 cout flush 해줘야 한다.