늘 겸손하게

ios_base::sync_with_stdio(false); cin.tie(NULL); 읽기, 쓰기 속도 증가 본문

Programming/C & C++

ios_base::sync_with_stdio(false); cin.tie(NULL); 읽기, 쓰기 속도 증가

besforyou999 2021. 8. 10. 12:02

출처 : https://stackoverflow.com/questions/31162367/significance-of-ios-basesync-with-stdiofalse-cin-tienull

 

Significance of ios_base::sync_with_stdio(false); cin.tie(NULL);

What is the significance of including ios_base::sync_with_stdio(false); cin.tie(NULL); in C++ programs? In my tests, it speeds up the execution time, but is there a test case I should be worried...

stackoverflow.com

 

 

알고리즘 문제는 시간제한이 있다. 그러므로 어떻게든 빠르게 문제를 해결하는 것이 중요하다.

 

읽고 쓰는 속도를 조금이라도 빠르게 하도록 아래의 코드를 사용하자.

 

 

 

1
2
3
ios_base::sync_with_stdio(false);
cin.tie(NULL);
 
cs

 

 

 

 

그런데 정확히 위의 두 코드가 어떤 일을 하는걸까?

 

엄밀히 말해 프로그램 실행 속도를 증가시키는 코드는 아니다. 부차적인 효과로 실행 시간이 짧아지는것.

 

그냥 맹목적으로 코드에 추가하기보다는 정확히 어떤 일을 하는 코드인지 알고 사용하자.

 

 

 

 

1.  ios_base::sync_with_stdio(false)

 

C와 C++ 사이 동기화를 비활성화시킵니다. 모든 standard stream은 C와 C++ 스타일의 I/O를 섞어 사용해도 원하는 결과를 얻을 수 있도록 default로 동기화 상태입니다. 이 동기화를 비활성화시키면 C++ stream은 자신만의 고유한 버퍼를 가지게 되고 C와 C++ 스타일의 I/O를 섞어 사용하는 것은 모험이 됩니다. (결과가 예측 불가능해집니다)

 

요약 : C와 C++ 사이 동기화를 비활성화시킵니다. C 와 C++ 스타일의 I/O를 섞어 사용하는 것의 결과가 예측 불가능해짐

 

 

2.  cin.tie(NULL)

cout과 cin 사이의 묶음을 해제합니다(untie). 묶인 스트림은 상대 스트림에서 I/O가 발생하기 전에 자동으로 자기 스트림을 flush합니다. 그러므로 cin과 cout 사이의 묶음을 해제하면 반드시 cin으로 input을 받기 전 cout의 버퍼를 수동으로 flush 해주어야 합니다.

 

요약 : cout과 cin 사이의 묶음을 해제. cin으로 입력받기 전 반드시 수동으로 cout flush. 

 

 

'Programming > C & C++' 카테고리의 다른 글

이차원 배열 동적할당 ( C / C++ )  (0) 2021.07.16
Swap macro(스왑 매크로)/C,C++  (0) 2021.01.30