Скорость доступа к std :: vector с помощью итератора по сравнению с оператором [] / index? - PullRequest
35 голосов
/ 26 марта 2010

Скажи, у меня есть

std::vector<SomeClass *> v;

в моем коде, и мне нужно очень часто обращаться к его элементам в программе, зацикливая их вперед и назад.

Какой самый быстрый тип доступа между этими двумя?

Доступ к итератору:

std::vector<SomeClass *> v;
std::vector<SomeClass *>::iterator i;
std::vector<SomeClass *>::reverse_iterator j;

// i loops forward, j loops backward
for( i = v.begin(), j = v.rbegin(); i != v.end() && j != v.rend(); i++, j++ ){
    // some operations on v items
}

Доступ по индексам (по индексу)

std::vector<SomeClass *> v;
unsigned int i, j, size = v.size();

// i loops forward, j loops backward
for( i = 0, j = size - 1; i < size && j >= 0; i++, j-- ){
    // some operations on v items
}

И предлагает ли const_iterator более быстрый способ доступа к векторным элементам в случае, если мне не нужно их изменять?

Ответы [ 11 ]

0 голосов
/ 26 марта 2010

С точки зрения скорости, я думаю, может быть почти то же самое. Лучше, вы можете профиль и проверить в любом случае.

По крайней мере, вы можете уменьшить количество используемых переменных:)

for( i = 0; i < size ; i++){
    // some operations on v items
    v[i];
    v[size-i+1];
}

О const_iterator: Просьба передать мой вопрос: A re const_iterators быстрее?

...