2012-06-15 3 views
2

는 차이가있다 ?[:: 벡터 크기 (1)]

+0

우려되는 점은 무엇입니까? 차이가 있어야하는 이유는 무엇입니까? – Vlad

+0

@Vlad : 나는 첫 번째 예제처럼 많은 코드를 발견했으며, 리팩토링해야하는지 궁금합니다. 가독성 외의 improvmenet이 없다면 나는 귀찮게하지 않을 것입니다. – lezebulon

+0

글쎄요, 여전히 많은 사람들이 STL을 배열을 제공하는 것으로 생각합니다. 그래서 그들은 작업에 익숙한 것과 같은 방식으로'std :: vector'를 사용합니다 C 배열. – Vlad

답변

1

유용한 차이가 없습니다.

back()을 직접 사용하는 것이 부분적으로 더 효율적일 수 있지만, 나는 그것을 의심합니다. 정말 예리한 느낌이 들었다면 생성 된 어셈블러를 살펴볼 수 있습니다. 컴파일러가 얼마나 영리한 지에 따라 명령어 또는 두 가지의 차이를 만들 수 있습니다.

size()[] 만 사용하는 이전 방법은 배열을 이해하거나 다른 언어로 유사한 구문을 사용하는 사람들에게 훨씬 익숙합니다. back()은 좀 더 C++에 특화되어 있습니다 (비록 그것이 거의 비밀스러운 관용어는 아닙니다).

2
mvt_act_idx = openCloseList.size()-1; 
openCloseList[mvt_act_idx].A += a; 

openCloseList 경우 서명되지 않은 뺄셈 다음 인덱스 벡터를 사용하는 큰 값을 생성합니다 비어 있습니다. 인덱싱 연산자는 주장 할 수도 있고하지 않을 수도 있습니다. openCloseList가 비어

openCloseList.back().A += a; 

경우 back 작업은 주장, 또는하지 않을 수 있습니다.

이러한 오류의 경우 back의 오류가 더 쉽게 이해할 수 있습니다.

어쨌든, 첫 번째 코드 조각은 back에 대한 호출이 충돌 할 수는 없지만, 부호없는 정수 (모듈로 동작이 간단하고 코드를 명확하게하는 경우를 제외하고) 숫자로 를 사용하지 않는 몇 가지 지침과 충돌 할 수 있습니다 그러한 지침과 함께.