티스토리 뷰
알고리즘을 풀다보면 입력 혹은 출력 횟수를 압도적으로 많이 요구하는 경우가 있다. 이럴 때 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()로 인위적으로 버퍼를 비울 수도 있다.
참고자료 - 백준
'Programming > C++' 카테고리의 다른 글
[C++] getline을 이용해 입력받을 때 cin.ignore로 버퍼비우기 (0) | 2022.06.24 |
---|---|
[C/C++] 문자열을 정수로 변환하기 : atoi (0) | 2021.08.14 |
[C++] unique, set을 사용해 중복요소 제거하기 (0) | 2021.08.12 |
[C++] sort 함수 사용하기 (0) | 2021.07.29 |
[C++] vector 기본 사용방법 (0) | 2021.07.26 |
- Total
- Today
- Yesterday
- 네트워크
- 스프링부트
- 인턴
- 오라클
- 환경설정
- 오류
- 국비교육
- Thymeleaf
- HeidiSQL
- 부트스트랩
- 개발용어
- Java
- C++
- C
- JSP
- CSS
- 이클립스
- SQL
- 데이터베이스
- 백준
- 스프링
- JVM
- 프로그래머스
- CS
- Open API
- svn
- 넥사크로
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |