혼자 공부한거라 틀린내용이 있을수 있습니다.

 

 

1. ios_base::sync_with_stdio(false);

C++ 에서 입출력을 하기위해

#include <iostream> 을 사용한다.

 

이때 iostream 라이브러리는 C++ 뿐만 아닌 C언어의 입출력 구문도 할수 있도록 동기화를 해준다.

즉 C언어의 stdio와 C++ 의 iostream 을 모두 가져온다.

 

 

단순하게 생각하면 모든 입출력 순간 stdio 와 iostream 인지 구분하고 그에 맞는 함수를 호출하는 동작을 할거 같음

 

 

그러므로 stdio를 비활성화 시킴으로 오직 C++의 iostream만 사용해 시간을 줄이는 방법인거 같음.

 

 

 

2. cin.tie(NULL);

위와 같은 문장을 수행하면 name을 입력 받기전에 Enter name : 문장이 출력되고 name을 받게 된다.

즉 cout 수행이 완료되기 전까지 즉 cout구문이 완전히 출력된때까지 cin을 받을수 없다. 

 

cout 동작에 대충 설명하자면 cout 버퍼로 출력할 데이터를 보내고 자동으로 출력 함수를 호출하여 화면에 출력해준다.

 

cin은 위의 cout의 출력 동작이 된것을 확인하고 그 이후에 데이터를 받게된다.

 

하지만 cin.tie(null)을 수행하면 cout과 cin의 연결을 풀어서 출력의 수행 여부와 상관 없이 데이터를 받을수 있게된다.

 

즉 "Enter name:" 이 나오기 전에 사용자의 입력을 받을수도 있다.

 

cin.tie(null)을 사용 했을때도 cout과 cin의 순서를 유지시키고 싶다면 std::flush나  std::endl 를 추가해서 사용해야한다.

 

하지만 이를 너무 많이 사용하면 cin.tie(null) 쓴거랑 안쓴거랑 별 차이 없다.

 

 

cin.tie(null)은 cout과 cin을 같이 사용안할때, 또는 작은 값들을 여러번 받아올때 사용하면 속도 개선에 긍정적인 영향을 줄거같음 ㅇㅅㅇ..

 

 

3. endl 대신 개행문자 사용 ( \n )

보통 개행문자 \n은 문자열을 출력할때 사용할수 있어 주로 endl 을 사용했었는데

 

이또한 속도에서 차이가 있다 ㅇㅅㅇ..

 

아직 모든것을 이해 못했지만

 

\n과 endl 모두 버퍼를 출력하는  연산을 수행한다.

 

endl은 cout의 버퍼를 출력하고 비워주는 flush() 함수까지 호출한다.

 

하지만 \n 은 버퍼만 출력하고 flush()는 안하므로 좀더 빠른 수행

 

 

 

 

 

+ Recent posts