C++/개인메모

ios::sync_with_stdio(false)

K.DJ 2022. 8. 30. 14:53
ios::sync_with_stdio(false);
cin.tie(NULL);
cout.tie(NULL);

알고리즘을 풀때 실행속도를 빠르게 하기 위하여 작성해주는 코드.

 

당장 오늘 이 3줄때문에 30분동안 씨름하던 코드가 단박에 정답이라고 나왔다.

 

도대체 이게 뭐길래 그럴까?

 

 

ios::sync_with_stdio(false);

 

C++의 iostream과 c의 stdio라는 입출력 stream의 동기화 해제한다는 의미다.

 

디폴트 상태는 true로 C++과 C의 입출력 스트림이 동기화 되어있어서 C스타일과 C++스타일의 입출력을 혼합사용하여도 사용자의 의도대로 입출력을 받도록 해준다.

 

해당 구문을 입력하여 동기화를 해제해주면 C++ 입출력 스트림이 독립적인 버퍼를 사용하게 되어 입출력시간을 절약할 수 있다.

 

단, C++와 C의 입출력 코드를 혼용할 경우엔 동기화를 해제할시 입출력 순서를 보장할 수 없다.

 

 

cin.tie(NULL);

cout.tie(NULL);

 

말 그대로 cin과 cout의 묶음을 풀어주는 의미다.

 

디폴트 상태에서 cin과 cout은 서로 묶여있고, 묶여있는 스트림들은 다른 스트림으로 IO작업이 옮겨가지 전에 자동으로 버퍼를 비워준다.

 

이 역시 묶음을 풀어주게 되면 버퍼를 비워주는 과정이 단축되어 입출력시간을 절약할 수 있지만,

 

cin과 cout을 연속으로 사용했을때, 각 코드가 실행되는 순서를 보장할 수 없다.

 

 

두 구문 모두 알고리즘의 실행시간을 감소시키는데 도움을 줄 수 있다.

하지만 모든 상황에 통용되는 구문은 아니니 의미를 잘 파악하고 사용하도록 하자.

endl보다 \n을 사용하는 것도 도움이 된다!