반응형

1. C/C++ 입출력 속도 차이?

C에서 사용하는 입출력 함수는 다음과 같은 것들이 있다.

이러한 함수는 속도는 빠르지만 사용하기에 불편하거나 귀찮은 것이 단점이다.

  • printf
  • scanf
  • gets
  • putchar

반면 C++에서 제공하는 cin, cout과 같은 함수는 사용이 쉽지만 입출력 속도가 C의 기본 함수만 못하다.

그렇기 때문에 C++에서 빠르고 편리한 입출력을 위해서는 입출력 속도를 향상시켜줘야 할 필요가 있다.

특히, 알고리즘 문제 풀이와 같은 경우에서는 많은 입출력으로 인해서 시간지연이 발생할 수 있기 때문에,

이러한 테크닉은 사용하는 것이 좋다.

 

2. 함수의 설명

  • cin.tie(NULL)

이 함수는 cin과 cout의 연결(tie)을 끊어주는 함수이다. 다시 말해서, cin과 cout 사이의 동기화를 해제해준다.

빠른 속도를 위해서 사용해주는 함수이지만, 특정 상황에서는 주의해서 사용해야 하는 함수이다.

다음의 코드를 보자.

std::cout << "내용 입력: ";
std::cin >> buf;

이와 같은 상황에서 일반적인 경우라면 "내용 입력: " 이라는 글이 출력된 후에 사용자의 입력을 받을 것이지만,

cin.tie(NULL) 함수를 호출한 이후에는 cout이 자동으로 flush 되지 않기 때문에, 해당 문구가 출력되지 않는다.

이러한 상황에서는 사용자가 일일이 cin 전에 cout의 flush를 해주어야 한다.

 

  • ios::sync_with_stdio(false)

C와 C++의 표준 stream은 기본적으로 동기화가 되어 있다. 그렇기 때문에 안정적으로 작동하지만 속도가 느린 것이다.

하지만 sync_with_stdio(false) 를 호출한 이후에는 이러한 동기화를 해제하여 속도를 향상시킬 수 있다.

호출 이후에 C++은 독립적인 버퍼를 사용하게 되며, 주의할 점은 이후에 printf, scanf와 같은 함수를 사용해서는 안된다.

 

3. 그 외

cout을 사용하는 경우, std::cout << endl; 을 사용하는 것보다 std::cout << '\n'; 이 더욱 속도가 빠르다.

반응형
복사했습니다!