I/O처리속도에 대해...

  • hunee
    hunee

    안녕하세요.
    알고스팟에 입문하게 된 hunee라고 합니다.
    반갑습니다. 가입한지 얼마 되지 않아 아직 감을 잘 못잡고 있습니다만;
    질문 하나 해도 될까요!?;ㅋ

    I/O의 처리속도에 대한 질문입니다.
    저는 C/C++를 사용하고 있는데요.
    튜토리얼글을 읽어 보니 C++의 cin이나 cout보다 C의 scanf나 printf가
    입출력 속도가 훨씬 빠르다는 글을 읽었습니다.

    QUADTREE문제로 여러가지 입출력 테스트를 몇 번 해보았는데
    아직 데이터가 작은 문제라 그런지 눈에 띄는 차이는 없더군요.
    (오히려 여러번 재채점을 하는 동안 cin이 더 빠를 때도 있었습니다.)

    그러다 하나 궁금한 게 생겼는데요.
    확실히 C++의 string관련이나 다른 표준함수들이 편할 때가 많습니다.
    자료의 크기를 신경쓰지 않아도 된다거나 string을 예로 들면 '+'연산자로
    단순하면서도 직관적으로 연결이 가능하거나 등등 말이죠.
    그래서 입력이나 출력을 scanf로 받아 string으로 변환하고 다시
    c_str()로 변환해서 printf로 출력하는 실험도 해봤는데요.

    혹시나, 이렇게 변환하고 C의 표준입출력을 사용하는 속도와
    그냥 변환 없이 바로 cin, cout을 입출력으로 사용하는 속도의 차이는 어떨까?
    생각하게 되었습니다. 제가(초보) 푸는 문제들은 데이터가 작은 탓에
    알아보기가 쉽지 않은데요.

    음...초보주제에 이런 자질구레한 것에 너무 신경쓰고 있습니다만;;
    (그냥 궁금해서...)
    혹시 아시는 분이나 경험 많으신 분 계신다면 부탁드립니다!;;
    (없다면 네...뭐 상관없습니다.)

    읽어주셔서 감사합니다!


    9년 전
7개의 댓글이 있습니다.
  • wookayin
    wookayin

    글의 결론이 잘 이해가 되지는 않지만..
    https://algospot.com/forum/read/2496/ 이 글을 읽어보시면 도움이 될거 같습니다 :)


    9년 전 link
  • hunee
    hunee

    음...그 글도 읽어봤어요...ㅠㅠ;


    9년 전 link
  • 일루
    일루

    자세한 설명을 생략하자면

    1) scanf -> char* -> printf
    2) scanf -> char* -> string -> .c_str() -> char* -> printf
    3) cin -> string -> cout

    1) 2) 는 거의 차이 없고
    3)만 느릴 것 같습니다 :)

    오버헤드가 cin cout에서 걸리는거지 string에서 걸리는게 아니라서요...


    9년 전 link
  • cjkis
    cjkis

    저 글보면 입력 천만개로 실험했는데 보통 제가 문제풀 때는 cin 아무리 많아봐야 50개정도면 떡을 쳤쑴 고로 별 차이 없을듯 ㅋㅎㅋㅎ


    9년 전 link
  • hunee
    hunee

    아, 그렇군요ㅋ 감사합니다. 역시나..ㅋ
    일루님 혹시 괜찮으면 그 오버헤드에 대해서 조금만 자세히 설명해 주실 수 있을까요? (그냥 궁금해서...;;)


    9년 전 link
  • 일루
    일루

    http://stackoverflow.com/questions/18048946/why-is-scanf-printf-faster-than-cin-cout

    http://codeforces.com/blog/entry/10297

    ^^;;;


    9년 전 link
  • hunee
    hunee

    죄송해요. 제가 검색해 볼걸 그랬네요;
    감사합니다!


    9년 전 link
  • 정회원 권한이 있어야 커멘트를 다실 수 있습니다. 정회원이 되시려면 온라인 저지에서 5문제 이상을 푸시고, 가입 후 7일 이상이 지나셔야 합니다. 현재 문제를 푸셨습니다.