티스토리 뷰

Programming/C++

[C++] 입출력 속도 높이기

감성적인 개발자 2021. 7. 25. 22:29

알고리즘을 풀다보면 입력 혹은 출력 횟수를 압도적으로 많이 요구하는 경우가 있다. 이럴 때 C++ 의 입출력 속도를 높이는 방법이 있다.

ios::sync_with_stdio(false);
cin.tie(NULL);
cout.tie(NULL);

이 구문을 추가하면 cin, cout 속도가 상승한다. printf와 cout은 큰 차이가 나지않지만 입력의 경우 속도가 약 3~4배까지 빨라진다고한다. 이제 코드를 하나씩 살펴보자

 

1. C언어와 stream synchronization 끊기

ios::sync_with_stdio(false);

iostream을 사용하면서 printf나 scanf또한 사용할 수 있는 이유는 c와 c++ 표준입출력이 동기화 되어있기 때문이다. 위의 구문으로 버퍼를 분리시켜 동기화를 끊으면 속도가 상승하지만 c언어에서 사용하는 입출력을 사용할 수 없다. 여기엔 printf, scanf 외에도 다양한 스타일(gets, getchar, puts, putchar)의 입출력이 포함되니 주의하자.


 

2. cin에서 cout 풀어주기

cin.tie(NULL);
cout.tie(NULL);

입출력 작업시 콘솔에 표시(flush)되는 방식이 변한다. 

cout << "input : ";

cin >> number; 

가 수행되면 출력이 먼저되고 입력을 받는 것이 일반적이나 cin에서 cout을 풀어주고 실행하면 number를 먼저 입력받고 cout은 출력되지 않는다고한다. (그러나 실험했을땐 출력이됐다;;)


 

3. endl대신 '\n'을 사용하기

cout << endl;
cout << '\n';

둘 다 줄바꿈을 수행하지만 endl같은 경우 줄바꿈 후 출력버퍼를 비우는 과정을 수행한다. 즉 flush한다. 참고로 fflush()로 인위적으로 버퍼를 비울 수도 있다. 

 

 

 

 

 


참고자료 - 백준

https://www.acmicpc.net/blog/view/56

https://www.acmicpc.net/blog/view/57

댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2024/10   »
1 2 3 4 5
6 7 8 9 10 11 12
13 14 15 16 17 18 19
20 21 22 23 24 25 26
27 28 29 30 31
글 보관함