ios_base::sync_with_stdio(false), cin.tie(0)
위의 두 구문을 사용하게 되면 연산속도가 빨라진다는 것은 다들 알고 계실겁니다.
sync_with_stdio
sync_with_stdio는 C++ 표준 스트림들이 C 표준 스트림들과 입출력 연산 후 동기화 할지 여부를 정해주는 것입니다.
예를들면
C++의 경우, std::cin, std::cout, std::cerr 등이 있고,
C의 경우, stdin, stdout, stderr이 있습니다.
즉 동기화된 C++ 스트림이 버퍼링 되지않고 C++ 스트림에 각 I/O 작업이 해당 C 스트림 버퍼에 즉시 적용됩니다.
해당 ios_base::sync_with_stdio(false) 구문을 사용 하지 않을 경우, C++ 과 C의 버퍼를 동시에 이용하기때문에
딜레이가 발생합니다.
하지만 구문을 작성해줌으로, 동기화를 비활성화 시켜줘 버퍼의 수가 줄어들고, 실행 속도는 더 빨라집니다.
그러나, 동기화를 비활성화 해주었기때문에 C 환경의 scanf, gets, getchar등을 사용하면 안되고, 엉뚱한 결과를 초래할
수 있습니다.
cin.tie(0);
cin.tie(0) 코드는 cin과 cout의 묶음을 풀어줍니다.
일반 알고리즘을 풀 경우, 문제가 없겠지만 여러 thread들을 동시에 사용 할 경우 입출력에 영향이 갈 수도 있습니다.
sync_with_stdio와 마찬가지로 C와 C++의 입출력을 혼용하면 엉뚱한 결과가 나타날 수 있습니다.
endl
C++에서 대체로 개행을 할때 endl을 많이 사용하지만, 연산속도에서의 차이가 있다고 합니다. ('\n')으로 개행하도록 합시다!
'🔥 Programming > C++' 카테고리의 다른 글
[C/C++] 동적할당 malloc, calloc, realloc들의 차이란? (0) | 2023.01.10 |
---|---|
[C/C++] C++ auto keyword의 장점과 단점 (0) | 2022.11.27 |
[C/C++] C++ 벡터 사용시, () 선언과 [] 선언의 차이 (0) | 2022.10.14 |
[C/C++] C++ 배열 초기화 (std::fill_n, std::fill, memset) (0) | 2022.10.13 |