1. ios::sync_with_stdio(0)란?

C++ 표준 스트림들이 C 표준 스트림들과 각각의 입출력 연산 후에 동기화할지 여부를 결정한다.

일반적으로 모든 표준 스트림들은 동기화되어 있다는 것을 디폴트로 하기 때문에 C++ 파일에서 작업을 하더라도 C++ 표준 스트림과 C 표준 스트림을 혼용해서 사용할 수 있다.

하지만 동기화를 끊게 된다면 사용하는 버퍼의 수가 줄어들면서 실행속도는 향상되지만 C와 C++의 입출력 방식을 혼용하여 사용할 수 없고, 쓰레드 안정성이 보장되지 않게 된다.

PS 문제에서는 많은 입출력 연산이 존재할 경우가 많으니 동기화를 끊어주고 사용하도록 하자 !

2. cin.tie(0)란?

cincout의 tie를 끊는다.
→ 기본적으로 cin과 cout은 묶여있고, 묶여있는 각 스트림들은 다른 스트림에서 IO 작업을 시작하기 전에 자동으로 flush(버퍼를 비워줌)를 보장한다.

1
2
cout << "Enter the name: ";
cin >> name;

tie를 끊게 된다면 다음과 위와 같은 코드에서 출력 구문이 출력되지 않았는데 먼저 입력을 받는 경우가 생길 수 있다. 대신 실행속도는 향상된다.

하지만 역시 PS 문제에서는 화면에 보이는 것이 중요한 게 아니고, 입출력을 많이 사용하게 되니 끊어주자 !

3. 결론

두 함수 다 출력 순서를 보장할 수 없고, 안정적이지 못하지만 알고리즘을 풀 때는 성능, 즉 속도가 중요하니 웬만하면 끊어주고 사용하도록 하자

태그:

카테고리:

업데이트:

댓글남기기