본문 바로가기

Language/C C++

[C++] std::endl

반응형
[C++] stdendl

알고리즘 문제를 푸는데 시간초과가 계속 발생했다. 정답 코드를 검색해서 비교해봤을때 내 코드와 다른 부분은 출력부분 뿐이었다. 나는 개행을 std::end를 사용했다.

이 부분을 \n으로 바꾸니 시간초과 문제를 해결할 수 있었다. for loop를 10만번 반복했을 경우 endl을 사용할 땐 411ms가 걸렸고, \n을 썼을 땐 53ms가 걸렸다. 약 8배 오래 걸렸다. 왜 이런 차이가 발생했을까?

두 가지 모두 개행을 삽입하느 방법이다. 차이점은 endl의 경우 호출 시 출력 버퍼를 flush 하게 된다. 즉 출력 버퍼에 남아있는 데이터를 모두 비우는 동작을 한다.

위와 같이 각 알파벳을 출력하는 코드를 작성했다. 여기서 endl을 사용할 경우 26번의 flush가 일어난다. 하지만 \n을 사용하면 버퍼에 26글자를 채운 다음 마지막에 flush가 일어나 출력한다.

호출이 적은 경우에는 상관 없겠지만 반복이 많아질 수록 endl을 사용할 경우의 성능을 떨어진다.

 

ref

https://www.educative.io/edpresso/what-is-the-difference-between-endl-and-n-in-cpp

반응형

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

[C/C++] Declaration VS Definition  (0) 2021.04.16
[C++] std::map  (0) 2021.04.13
[C++] 클래스 표준 입출력  (0) 2021.04.11
[C++] Reference(1/2)  (0) 2020.09.13
[C++] 클래스 생성자  (0) 2020.04.09