그냥 게임개발자

ios::sync_with_stdio(false); cin.tie(NULL); cout.tie(NULL); 본문

C++ 나만의 복습

ios::sync_with_stdio(false); cin.tie(NULL); cout.tie(NULL);

sudoju 2024. 3. 31. 21:33

이거 뭔지 아시는 분

백준하다가 음.. 이거 맞는데 왜 시간초과지..하면서

구글링하다가 이거 붙이면됨!

해서 붙이니까 ㄹㅇ 됐는데 왜 되는지 모르는 애들임.

ㄹㅇ 3총사

 

 

뭐 암튼

흠흠

 

ios::sync_with_stdio(false);

C와 C++ 표준 stream의 동기화를 비활성화하는 코드이다.

동기화가 활성화가 되어있을때는 C 스타일과 C++ 스타일의 입출력을 혼합해도 문제가 없다.

뭐 예를들어 printf, scanf와 cin, cout을 혼합하여 사용해도 문제가 없다는 소리이다.

 

하지만 위의 코드를 작성하게 되면 C와 C++은 혼합할 수 없는 대신에 C++ 스타일 코드만 사용하면 기존 동기화 과정에서 필요하던 시간이 절약되어 입출력속도가 빨라지는 효과를 볼 수 가 있다.

 

즉 알고리즘 문제를 풀 때는 표준 stream의 동기화는 필요 없고 시간이 절약되는 게 항상 우선이니 이 코드로 인해 입출력 시간을 절약할 수 있다.

다만 이 코드를 사용하면 기존 C의 표준 입출력을 사용할수가 없다.

 

cin.tie(NULL); cout.tie(NULL);

cin.tie는 평소 cin과 cout을 묶어준다.

예를 들어

string name;

cout << "What is your name? \n" <<;
cin >> name;

 

이런 코드가 있다고 치자.

 

평소에는 What is your name?이라는 문자열이 나오고 입력 대기를 가지게 된다.

 

그러나 cin.tie(0)이나 cin.tie(NULL) 코드를 추가해주면

What is your name?가 출력이 되기 전에 이름을 입력할 수 있다.

내부적으로 cin과 cout을 묶어주는 과정을 수행하지 않기 때문에 시간이 절약이된다.

 

물론 이는 자연스럽지 못한 프로그래밍이긴 하다.

What is your name?이 나오기도 전에 이름을 치라는 것은 어떻게 안단 말인가?

 

그러나 알고리즘 문제는 상관이 없나보다.

cout.tie(NULL)또한 똑같다 ㅇㅇ

 

 

 

 

'C++ 나만의 복습' 카테고리의 다른 글

string - reverse()  (0) 2024.03.31
ASCII 코드와 문자열  (0) 2024.03.31
string의 메서드  (0) 2024.03.31
타입? 타입변환?  (0) 2024.03.31
출력  (0) 2024.03.31