cin과 cout이 그렇게 느린 이유는 C 라이브러리의 stdio buffer와 동기화하는과정 때문에 느려진다고 한다.
즉, iostream, stdio의 버퍼를 모두 사용하기 때문에 딜레이가 발생하게 된다.
std::ios::sync_with_stdio(false);
std::ios_base::sync_with_stdio(false);
std::cin.sync_with_stdio(false);
이를 해결하기 위해서는 위의 3가지 중 1개의 함수를 사용하면 된다.
이유는 ios::sync_with_stdio는 cpp의 iostream을 c의 stdio와 동기화시켜주는 역할을 하는데
위의 함수를 사용하면 동기화를 끊고 c++만의 독립적인 버퍼를 생성하게 되고 c의 버퍼들과는 병행하여 사용할 수 없게 된다.
따라서 사용하는 버퍼의 수가 줄어들었기 때문에 속도는 높아지게 됩니다.
https://www.acmicpc.net/board/view/1124
하지만 위 글을 참조해보면 sync_with_stdio(false)가 런타임 에러를 내는 경우도 있다.
따라서 시간이 중요한 문제라면 scanf와 printf를 쓰는것이 나은 것 같다.
'C++ 공부' 카테고리의 다른 글
| strlen함수의 잘못된 사용 (0) | 2018.09.06 |
|---|---|
| 문자열 입력 함수 scanf, gets, fgets (0) | 2018.09.04 |
| typedef int Data 라고 쓰는 이유 (0) | 2018.08.28 |
| #define과 enum의 차이 (0) | 2018.08.16 |
| new로 2차원 배열 만들기 (0) | 2018.08.16 |