2010-03-31 3 views
1

Я очень хорошо знаком с гарантией производительности STL (и другого контейнера), однако я не могу найти ничего конкретного о простых массивах.Array performance question

Являются ли методы арифметики указателей и [] постоянными или линейными?

ответ

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. – 2010-03-31 15:28:01

+0

Спасибо, я так и думал, но у меня был момент сбой мозга. Благодаря! – Konrad

0

Арифметика указателя постоянна - обычно это однократное умножение и дополнение к базе. [] также является арифметикой указателя.

2

Вектор фактически представляет собой обертку вокруг массива, поэтому они должны обеспечивать одинаковые гарантии производительности.