C&C++

c++의 입출력 ios_base::sync_with_stdio(false)

mmalmmizal 2022. 8. 12. 23:29

C++을 익히려 문제를 풀다가

ios_base::sync_with_stdio(false); cin.tie(NULL); cout.tie(NULL); 이라는 문장을 접했다.

 

왜 쓰는 걸까?

대충 짐작해보면 C++의 입출력과 관계있는 거 같다.

 

C++을 처음 배울 때 왜 C에서 사용하는 #include <stdio.h>, scanf, printf 대신에

#inlcude <iostream>, cin, cout, <<, >>연산자를 사용하는 지 이해가 안됐다.

 

C++iostream이라는 표준 입출력 라이브러리를 통해 cout, cin, <<연산자 정의를 포함한다.

또한 using namespace std;를 적어줌으로써 std 이름 공간에 선언된 모든 이름에 std::를 생략할 수 있는 것

 

내 수준에서 간단하게 간단하게 정리해보자면,

ios_base::sync_with_stdio(false);

 

특징 : cc++I/0 sream을 분리시키는 역할, CC++의 입출력 버퍼는 독립적인 버퍼를 가지게 된다.

단점 : C의 입출력 객체와 혼용해서 사용하면 안됨

장점 : 사용하는 버퍼의 수가 줄어 cout cin의 속도를 향상시킴

 

 

cin.tie(NULL) / cout.tie(NULL)

 

cincout의 묶음을 풀어준다. 입출력이 반복되는 경우는 이런 묶음을 풀어주어야 한다.

 

 

참고>

cout, cin 최적화 방법과 주의점 :: 코오오오딩 (tistory.com)

C++ 입출력 속도와 ios_base::syn.. : 네이버블로그 (naver.com)

[C++] 입출력 함수(cout, cin) 속도 개선 / ios_base::sync_with_stdio(false); cin.tie(null); (tistory.com)