2010-03-31 9 views
1

STL 벡터 (및 기타 컨테이너) 성능 보장에 대해 잘 알고 있지만 일반 배열에 대해서는 구체적인 내용을 찾을 수 없습니다.배열 성능 질문

포인터 연산과 [] 메서드가 일정하거나 선형 시간입니까?

답변

9

일정 시간입니다. (vector과 동일)

a[b]라고 말하면 *(a + b)이됩니다. 둘 다 (포인터 산술) 추가 및 역 참조는 일정한 시간입니다. 거기

T* p; size_t i; 

T* q = p + i; // same as: 
T* q = reinterpret_cast<T*>(reinterpret_cast<char*>(p) + i * sizeof(T)); 

마다 일정한 동작 시간 :

포인터에 정수를 가산

은 그 위에 다수의 소자가 이동한다.

+0

어리석은 질문 - 총 작동 시간은 일정합니까? 그러면 (pObj + 1)과 (pObj + 10)는 같은 시간이 걸릴 것입니까? – Konrad

+1

@Konrad 예 - 포인터 산술은 단지 산술입니다. 1 + 1은 1 + 10과 같은 시간이 걸립니다. –

+0

감사합니다. 나는 그렇게 생각했지만 두뇌가 실패하는 순간을 가졌습니다. 감사! – Konrad

0

포인터 계산은 상수입니다. 일반적으로 기본 곱셈과 덧셈입니다. []는 일종의 포인터 연산입니다.

2

벡터는 실제로 배열 주위의 래퍼이므로 동일한 성능 보장을 제공해야합니다.