C++ 개념 공부

[C++] ios_base::sync_with_stdio

taene_ 2023. 9. 2. 10:36

<기본형태>

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

- 위 코드를 작성하면 입출력 속도가 빨라져서 시간초과로 실패한 문제들을 성공시킬 수 있다고 한다. 

다만 이 코드를 사용하면 기존 C의 표준 입출력인 scanf, printf, getchar 함수를 사용하면 오류가 발생할 수 있다고 한다. C++의 입출력인 cin, cout만 사용하도록 주의해야한다.

 

#include <iostream>

using namespace std;

int main()
{
	ios::sync_with_stdio(false);

	unsigned int n;
	cin >> n;
	for (int i = 1; i <= n; i++)
	{
		cout << i << "\n";
	}

	return 0;
}

여기서 cin.tie(NULL) 이나 cout.tie(NULL) 을 사용하지 않는 이유는 tie()는 '입력과 출력' 연결을 끊어주는 것으로, cin 입력이 들어오면 자동적으로 출력 버퍼를 비우게 된다. 즉, 입출력이 반복적으로 있을 땐 연결을 끊어주는 것이 맞지만, 이 문제는 처음에만 입력하고 그 뒤엔 출력만 있으므로 cin.tie(NULL);이나 cout.tie(NULLL)을 써준 것과 안 쓴 것은 성능이 같다.