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을 사용하는 것도 도움이 된다!