[C++] 입출력 속도 향상

🙈·2022년 8월 15일
0

[PL] C++

목록 보기
1/4
post-thumbnail

C++을 이용하여 알고리즘 문제를 풀다보면 아래 구문을 main 시작 부분에 적어둔 것을 많이 볼 수 있다. 이 구문의 의미에 대해 알아보고자 한다.

ios_base::sync_with_stdio(false);
cin.tie(NULL); cout.tie(NULL);

ios_base::sync_with_stdio(false);

C++ 표준 스트림과 C 표준 스트림 각각의 입출력 연산의 동기화 여부를 설정한다.

  • true
    C++ 표준 스트림 str이 C 스트림 f와 동기화된다.
    C++ 스트림들이 자신의 버퍼를 사용하지 않고 이에 대응하는 C 스트림 버퍼를 사용한다.
    C++ 입출력 연산과 C 입출력 연산을 혼용할 수 있다.
    C++ 스트림의 쓰레드 안정성을 보장한다.

  • false
    C 표준 stream과 C++ 표준 stream의 동기화를 끊는다.
    C++ 스트림이 각각의 입출력 연산에 대해 버퍼 사용한다.
    따라서, 입출력 연산 속도가 향상된다.

cin.tie(NULL); cout.tie(NULL);

cin을 cout으로부터 untie한다는 의미이다.

stream이

  • tie
    stream에서 입출력 요청이 오기 전에 stream을 flush 시킨다.
    program이 user에게 입력을 요구하기 전에 output flush시키다.

  • untie
    output이 flush되지 않은채로 user에게 입력을 요구한다.

※ cout은 output은 buffer로 가득차거나 flush되기 전까지 출력하지 않는다. 따라서 untie 시, cin으로 입력 받기 전에 출력을 하고 싶다면 수동적으로 cout flush 해줘야 한다.

profile
개발 일기🌱

0개의 댓글