i++ vs. ++i (for statements)

  • jeonaire
    jeonaire

    안녕하세요,
    컴공입문클래스를 조금 들어본 대학생입니다-

    알고리즘 문제 해결 전략 책이나 풀이를 볼때
    for statement를 쓸 때
    :

    for (int i = 0; i < N; ++i) << ++i가 쓰이는데

    제가 학교에서 클래스를 들었을때에는

    for (int i = 0; i < N; i++) << i++로만 쓰였습니다.

    ++i 와 i++의 차이는
    전자는 i에 1이 먼저 더해지는거고 (i + 1 = i)
    후자는 1을 나중에 더하는거라고 대충 알고있는데 (i = i + 1)

    이렇게 for statement에서 ++i가 쓰이는 경우는 왜 그런가요?
    각 각 장단점이있나요?

    ㅠㅠ제가 어렸을때 미국에와서 한국말이 좀 서툽니다. 혹시 이해 어려운 부분 있으시면 말해주세요. 감사합니다!


    4년 전
5개의 댓글이 있습니다.
  • JongMan
    JongMan

    안녕하세요? for()의 경우에는 두 방법이 아무런 차이가 없습니다. ^^; 옛날 컴파일러가 비효율적이었던 시절에는 ++i가 빨랐다고 하는데, 이제는 컴파일러가 다 최적화해서 같은 코드를 생성하기 때문에, 어느 쪽을 쓰느냐는 그냥 개인 취향의 문제입니다.


    4년 전 link
  • lbjcom
    lbjcom

    범용 CPU의 경우에는 JongMan님 말씀이 맞을 것 같고요.

    특수한 하드웨어들... 예를 들어 DSP같은 경우에는 내부적으로 사용하는 intrinsic function들이 ++i 에 맞게만 설계된 경우도 있습니다. 예를 들어, 메모리의 값을 로드해올때 포인터의 인덱스를 먼저 증가시킨 후 로드해오는 명령은 있지만, 로드해온 후 인덱스를 증가시키는 명령은 없는 식으로요. 물론 이런 경우에도 컴파일러가 잘 설계되면 차이가 없을 것 같네요^^


    4년 전 link
  • amok
    amok

    ++i 와 i++의 차이는
    전자는 i에 1이 먼저 더해지는거고 (i + 1 = i)
    후자는 1을 나중에 더하는거라고 대충 알고있는데 (i = i + 1)

    라고 하신 걸 보면 ++i와 i++의 차이에 대해 잘못 이해하고 계신 것 같습니다. 일단 i + 1 = i는 불가능한 statement입니다. C나 C++, JAVA등의 언어 기본서를 공부하시면 좋을 것 같습니다.


    4년 전 link
  • Toivoa
    Toivoa

    for문에서와 같이 결과값을 다시 사용하지 않는 경우는 보통 컴파일러 최적화가 들어가서 둘다 똑같은 코드가 생성됩니다.

    built-in type 같은 경우는 별 차이 없는데, stl iterator 같은 경우는 postfix ++ opreator는 원래 값을 임시 변수에 저장한 후에 iterator를 옮기고, 임시 변수를 리턴하는 식으로 구현됩니다. (http://www.cplusplus.com/reference/iterator/iterator/?kw=iterator example 참조하시면 됩니다.)

    물론 컴파일러가 알아서 최적화해주기는 하지만, 꼭 필요하지 않은 경우에는 prefix ++ operator를 사용하시는 것이 좋습니다.


    4년 전 link
  • coldradio
    coldradio

    요즘 코딩 스타일은 ++연산자를 잘 권하지 않는 분위기 인것 같더라구요. for 문에서의 증감 정도야 궨찮겠지만 짧아진 코드로 인해 가독성이 좀 떨어지는 경우가 있습니다. 저는 개인적으로는 파이썬에서 별 생각 없이 ++연산을 했는데 ++ 연산자가 없는 파이선에서 에러는 찾는데 고생한 후론 사용을 잘 안 합니다.^^;;


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