cin.tie(NULL) / ios_base::sync_with_stdio(false) 사용시 주의사항

2020. 6. 10. 12:38·에러 해결

일반적으로 주요 입출력 방법의 속도 차이는 아래 표와 같다.

언어 입력 방법 평균(초)
C/C++17 scanf 0.798
C++17 cin 2.1742
C++17 ios_base::sync_with_stdio(false); cin.tie(NULL); 0.5938
C++17 ios_base::sync_with_stdio(false); 0.6348

 

언어 출력 방법 평균(초)
C/C++17 printf 0.8614
C++17 ios_base::sync_with_stdio(false); cout << i << '\n'; 0.827
C++17 ios_base::sync_with_stdio(false); cout.tie(NULL); cout << i << '\n'; 0.8272
C++17 cout << i << '\n'; 0.9229
C++17 cout << i << endl; 11.5322

 

가능하면 scanf, printf를 사용하는 게 좋겠지만

  • 불가피하게 cin, cout을 써야만 할 때
  • 그런데 성능은 매우 빨라야 할 때

하나의 수단으로 main 함수의 시작 부분에 아래와 같은 코드를 삽입할 수 있다.

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

이렇게 하면 cin, cout 을 사용해도 scanf, printf를 쓰는 것과 비슷한 속도를 만들어 낼 수 있다.

하지만 이 방법은 알고리즘 문제를 해결할 때에만 사용하고 가능하면 사용하지 않는 것이 좋다고 한다.

 

 

cin.tie(NULL)

기본적으로 cin과 cout은 stream buffer를 공유(tie)하고 있다.

즉, 입력 또는 출력 요청을 받게 되면, 실행 전 각각의 stream 버퍼를 확인하고 flush 하는 과정을 거치게 된다.

'std::cin.tie(NULL)'로 cin과 cout을 untie 해주게 되면, 이런 과정을 거치지 않기 때문에 속도가 빨라질 수 있다!

(참고 : https://sweetnew.tistory.com/32)

 

 

ios_base::sync_with_stdio(false)

  • ios_base : cin, cout 등
  • sync : 동기화
  • stdio : printf, scanf, getchar, fgets, puts, putchar 등

 

따라서

ios_base::sync_with_stdio(false);

이 코드는

ios_base와 stdio와의 동기화를 하지 않음을 의미한다.

 

그러므로 동기화를 false 시킨 이후에는 cin / scanf를 같이 쓰거나 cout / printf를 같이 쓰면 문제가 발생할 수 있다.

즉, 멀티 쓰레드 환경이 아닌 단일 쓰레드 환경으로 만들어주어야 오류가 발생하지 않는다.

반응형
저작자표시 비영리 변경금지 (새창열림)

'에러 해결' 카테고리의 다른 글

[jekyll] 작성한 post가 보이지 않는 이슈  (0) 2022.10.20
No JVM shared library file (libjvm.so) found. Try setting up the JAVA_HOME environment variable properly 오류 해결  (0) 2021.04.08
[iOS] iOS HTTP 통신 허용하기  (0) 2020.06.22
Mac os vscode 컴파일 안되는 문제  (0) 2020.03.29
Homebrew로 node 설치 시 발생한 오류 해결  (2) 2020.03.27
'에러 해결' 카테고리의 다른 글
  • No JVM shared library file (libjvm.so) found. Try setting up the JAVA_HOME environment variable properly 오류 해결
  • [iOS] iOS HTTP 통신 허용하기
  • Mac os vscode 컴파일 안되는 문제
  • Homebrew로 node 설치 시 발생한 오류 해결
yenim
yenim
    반응형
  • yenim
    FOREST, FOR REST
    yenim
  • 전체
    오늘
    어제
    • 분류 전체보기 (235)
      • Android (9)
      • Baekjoon (142)
        • 구현 (3)
        • 브루트포스 (10)
        • BFS (12)
        • DFS (13)
        • 백트래킹 (3)
        • DP (26)
        • 최소 스패닝 트리 (1)
        • 이분 탐색 (10)
        • 그리디 알고리즘 (12)
        • 투포인터 (2)
        • 슬라이딩 윈도우 (2)
        • 다익스트라 (1)
        • 시뮬레이션 (6)
        • 분할 정복 (3)
        • 문자열 (9)
        • 정렬 (6)
        • 탐색 (2)
        • 수학 (20)
        • 링크드리스트 (1)
      • 프로그래머스 (15)
        • 구현 (4)
        • 브루트포스 (4)
        • DFS (1)
        • DP (1)
        • HEAP (1)
        • 문자열 (3)
        • 해시 (0)
        • 비트 (1)
      • CS (39)
        • 개발상식 (9)
        • 자료구조 (8)
        • 네트워크 (7)
        • 운영체제 (5)
        • 데이터베이스 (4)
        • 디자인패턴 (1)
        • 알고리즘 (5)
      • Programming Languages (3)
        • C & C++ (2)
        • Kotlin (1)
      • 취준 (7)
      • Git (2)
      • Google Online Challenge (4)
      • 에러 해결 (6)
      • WEB (0)
      • NOTE (3)
      • DIARY (3)
      • 알고리즘 (1)
  • 블로그 메뉴

    • 🏡 HOME
    • ✏️ TIL
  • 링크

    • github
  • 공지사항

  • 인기 글

  • 태그

    코테
    너비우선탐색
    백준
    DP
    BFS
    그래프
    다이나믹 프로그래밍
    프로그래머스
    깊이우선탐색
    그리디 알고리즘
    DFS
    브루트포스
    CS
    명품 자바프로그래밍
    문자열
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.4
yenim
cin.tie(NULL) / ios_base::sync_with_stdio(false) 사용시 주의사항
상단으로

티스토리툴바