c++) 입출력 관련 속도
1. endl은 '\n'보다 훨씬 처리속도가 느리다.
2. ios::sync_with_stdio는 c++의 iosteram을 c의 stdio와 동기화 시킨다.
즉 c++ 입출력 연산들이 이에 대응되는 c 스트림 버퍼를 직접 사용한다.
따라서 ios::sync_with_stdio(1) 즉 true로 주면, c++입출력 연산(std::cin, std::cout 등)과 c 입출력 연산을 혼합해 사용할 수 있다.
ios::sync_with_stdio(0) 즉 false 라면 동기화가 끊기고 사용하는 버퍼의 수가 줄어들기 때문에 실행속도가 향상된다.
이때 c++입출력 연산과 c 입출력 연산들을 같이 사용하면 그 입출력 순서들이 보장 되지 않는다.
예를들어
cout << "HI";
printf("BYE");
cout << "hi";
이것이 순서대로 출력되지만, false라면 그 순서가 보장되지 않는다.
따라서 true일때는 c++ 입출력 연산(iostream)인 cin,cout을
c입출력 연산(stdio) 함수인 getchar() 등과 같이 쓰면 안된다.
참고(modoocode.com/281, www.acmicpc.net/board/view/8074,
3. cin.tie(NULL), cout.tie(NULL)
cin을 cout으로부터 untie 한다.
stream을 tie하면 다른 stream에서 입출력요청이 오기전에 stream을 flush 시킨다.
실행속도가 상승한다.
(참고: su-m.tistory.com/7, leeeegun.tistory.com/4)
정리하자면,
1. c함수인 printf, scanf를 사용하고
2. c++ 함수인 cin,cout 등 사용해야 하고, 속도를 더 빠르게 하고 싶다면,
ios::sync_with_stdio(0)
cin.tie(NULL), cout.tie(NULL)
을 사용하되, c함수와 c++함수를 같이 사용하면 안된다.
3. endl 보다는 '\n'을 사용하자