Behind.dev

[c++] 입출력 시간 단축 본문

프로그래밍언어/C++

[c++] 입출력 시간 단축

뽀잉뽀잉뽀 2024. 4. 22. 23:04

💡c++을 사용하여 알고리즘 문제를 풀 때 시간을 단축시키기 위해 아래의 코드를 추가해 준다. 

 

ios_base::sync_with_stdio(false);
cin.tie(NULL);

 

명확하게 사용하는 이유코드들의 기능에 알아보고자 글을 작성하였다.

 

ios_base::sync_with_stdio(false)

 

C++의 표준 스트림("cin", "cout" 등)과 C 표준 입출력 라이브러리("scanf", "printf" 등) 사이의 동기화를 해제한다.

  • 기본적으로 C++의 표준 스트림은 C 표준 라이브러리와 동기화되어 있어 C표준 라이브러리의 함수와 섞어서 사용할 수 있다.
  • 하지만 이 동기화는 성능에 영향을 주므로 동기화를 해제하면 cin 및 cout의 속도가 향상한다.

 

cin.tie(NULL)

 

C++에서 cincout은 기본적으로 연결되어 있는데 이 연결을 해제해준다.

  • 연결을 해제하지 않는다면 cin을 사용할 때 cout이 자동으로 플러시 된다.
  • 그러므로 연결을 해제해 주면 cout이 자동으로 플러시 되지 않아 I/O 작업의 속도가 빨라진다.

 

✔️ cin과 cout 사이의 "연결이 되어있다"라고 할 때, 이는 cin을 사용하여 입력을 받기 전에 cout의 버퍼가 자동으로 플러시(flush)된다는 의미이다. 아래에서 연결되었다는 의미를 직관적으로 확인할 수 있는 예시를 들어보았다.

 

< 기본 연결 상태 >

#include <iostream>
using namespace std;

int main() {
  cout << "Enter a number: ";

  // 사용자로부터 숫자 입력 받기
  int number;
  cin >> number;

  // 입력 받은 숫자 출력
  cout << "You entered: " << number << endl;
  return 0;
}

 

프로그램을 실행하면 다음과 같은 순서로 동작한다.

 

1. cout 명령으로 " Enter a number: "라는 메시지가 출력 버퍼에 저장된다.

2. 사용자가 입력을 시작하기 전에 cin 명령이 실행되면서 cout의 버퍼가 자동으로 플러시 되고 버퍼에 저장된 메시지 ( "Enter a number:" )가 화면에 표시된다.  => 이는 cin과 cout이 연결되어 있기 때문이다.

 

< 연결을 해제한 경우 >

#include <iostream>
using namespace std;

int main() {
  // cin과 cout의 연결을 해제
  cin.tie(NULL);

  // 출력 메시지
  cout << "Enter a number: ";

  // 사용자로부터 숫자 입력 받기
  int number;
  cin >> number;

  // 입력 받은 숫자 출력
  cout << "You entered: " << number << endl;
  return 0;
}

 

동작순서

1. "Enter a number: " 메시지가 출력 버퍼에 저장된다.

2. cin 실행 시 cout의 버퍼가 자동으로 플러시 되지 않기 때문에, 만약 버퍼가 충분히 차지 않았다면 화면에 아무것도 표시되지 않을 수 있다.

3. 사용자가 숫자를 입력하고 엔터를 누르면 입력이 받아들여지며, 그 후에 이전에 출력되지 않았던 "Enter a number: " 메시지와 함께 "You entered: [입력된 숫자]"가 출력될 수 있다. 

'프로그래밍언어 > C++' 카테고리의 다른 글

[C++ STL] priority_queue  (0) 2024.06.02
[c++] std::string::iterator 사용법  (0) 2024.04.21