2017-03-11 1 views
0

는 반복하는 벡터라고하고, 나는 두 가지 방법으로 그것을 할 수, 벡터의 일부 항목에 대한 작업을하고 싶지 않아 : 이것은

내가 선호하는 사람은 사용하기 :

vector<int> vec; 
void loopFunction(int toIgnore) { 
    for (size_t index = 0; index < vec.size(); index++) { 
     if (vec[index] != toIgnore) { 
      // do stuff 
     } 
    } 
} 

내가 최종 결과에서 알 전혀 차이가 없습니다 :

vector<int> vec; 
void loopFunction(int toIgnore) { 
    for (size_t index = 0; index < vec.size(); index++) { 
     if (vec[index] == toIgnore) continue; 
     // do stuff 
    } 
} 

이 나는 ​​대부분의 사람들이 사용하는 참조입니다. 그러나 두 번째 방법이 실행 범위를 새로 열었으므로 후드에서 어떤 차이가 있습니까? 이 두 가지 중 어떤 것이 다른 것보다 선호됩니까?

덕분에 내 댓글에 명시된 바와 같이

+0

필자는 가능한 한 많은 스코프를 포함시키지 않으려 고 노력 했으므로 루프 내 모든 것이 같은 레벨에 있도록'continue'를 사용하여 첫 번째 예제로 갈 수있었습니다. 그래도 모든 취향에 대해. 어느 쪽이든 성능에 이점이 있습니다. 내가 아는 한 –

+0

나는 또한 그것을하는 첫 번째 방법을 선호합니다. 내 코드에서도 중첩 된 범위를 좋아하지 않습니다. 그러나 새 범위를 추가하면 오버 헤드가 추가되는지 여부가 결정됩니까? 대형 루프일지도 모릅니다. – Everyone

답변

2

는 개인 수준에, 나는 불필요한 코드 중첩 및 범위의 생성을 방지하기 위해 continue를 사용하여 첫 번째 구현을 선호합니다.

구현 될 정상적인 코드 외에도 각각의 성능 오버 헤드는 if-statement의 표현식 평가입니다. 둘 다 평가할 표현식을 포함하기 때문에 동일한 성능을 발휘합니다.

이것이 어떻게 컴파일되는지 C/C++에서 생각해 보면 어셈블리 코드로 바로 넘어갑니다. 코드를 중첩하는 방법에 관계없이 해당 레벨에서 간단한 jmpcmp 명령으로 컴파일됩니다. 따라서 구현에 관계없이 컴파일시 ~, 동일한 어셈블리 코드가 있습니다.

어느 쪽이든 그것을 보면, 이것은 마이크로 마이크로 미세 최적화입니다. 코드 서식 및 스타일을 선호하십시오.

+0

설명해 주셔서 감사합니다. 그러면 첫 번째 형식을 고수하고 더 깔끔하게 보입니다. p – Everyone

+0

거대한 벡터에 대한 성능 테스트를 수행했으며 비슷한 결과를 산출했습니다. 또한 C#에 대한 테스트를 수행하고 동일한 결과를 얻었으므로 아무런 차이가 없습니다. 단지 선호도 – Everyone