본문 바로가기
lang/C,C++

++i, i++? 무엇을 선택해야 할까

by Wordbe 2019. 10. 11.
728x90

결론부터 말하면, ++i를 사용하는 것이 i++보다 속도 효율이 더 좋을 수도 있습니다.

 

아래와 같이, int 와 같은 타입은 사실 거의 영향이 없습니다.

for (int i=0; i<n; ++i){
    ...
}

 

 

반면, 무거운 타입을 가진 컨테이너의 반복자(iterator)를 사용할 때는 상황이 달라지기도 합니다.

#include <map>
using std::map;

struct SuperHeavyStruct{
    ...
}
map<int, SuperHeavyStruct> mymap;

for (map<int, SuperHeavyStruct>::iterator it = mymap.begin(); it != mymap.end(); ++it){
    ...
}

 

it++ 은 먼저 반복자 자신 객체의 복사본을 만들고,

원래 객체 인덱스를 증가시킨 다음에,

자신이 만든 복사본을 반환합니다.(즉 이전 반복자의 복사본을 반환합니다.)

우리는 이 복사본이 필요없기 때문에, 시간낭비입니다.

 

하지만, ++it은 복사본은 생성하지 않으면서,

원래 객체 인덱스를 증가시키고 그 객체를 바로 반환합니다.

참고로 ++i 와 i = i + 1은 같은 표현입니다. (2021-03-15 추가)

 

따라서 조금 더 효율이 좋다고 말할 수 있지만,

최근의 컴파일러는 똑똑하게도, 이런 부분을 알아서 조절해주어 거의 성능차이가 없다고 합니다.

 

그러나, 이 부분을 알고 있는 사람입장으로써는 명시적으로 ++it을 표기해주는 것이 좋다고 생각합니다.

물론, 큰 문제는 없습니다.

 

 

[Reference - https://stackoverflow.com/questions/6926930/it-or-it-when-iterating-over-a-map]

728x90

댓글