Я очень хорошо знаком с гарантией производительности STL (и другого контейнера), однако я не могу найти ничего конкретного о простых массивах.Array performance question
Являются ли методы арифметики указателей и [] постоянными или линейными?
Я очень хорошо знаком с гарантией производительности STL (и другого контейнера), однако я не могу найти ничего конкретного о простых массивах.Array performance question
Являются ли методы арифметики указателей и [] постоянными или линейными?
Это постоянное время. (То же, что и 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));
Каждой операцию в существует постоянное время.
Арифметика указателя постоянна - обычно это однократное умножение и дополнение к базе. [] также является арифметикой указателя.
Вектор фактически представляет собой обертку вокруг массива, поэтому они должны обеспечивать одинаковые гарантии производительности.
Глупый вопрос - постоянное время для полной работы? Таким образом, (pObj + 1) и (pObj + 10) занимают одинаковое количество времени? – Konrad
@ Konrad Да - арифметика указателя - это просто арифметика, 1 + 1 принимает то же время, что и 1 + 10. – 2010-03-31 15:28:01
Спасибо, я так и думал, но у меня был момент сбой мозга. Благодаря! – Konrad