Date Редакция Категория comp Теги Cpp

...и что лучше: использовать итераторы

vector<string> vs = GetVector();

for(vector<string>::iterator it = vs.begin(); it != vs.end(); ++it)
{
   *it = "Am I faster?";
}

или индексы

for(size_t i = 0; i < vs.size(); ++i)
{
   vs[i] = "Am I faster?";
}

Итераторы позволяют перебирать объекты произвольных контейнеров. В контейнере может быть не определен operator[] и, стало быть, использование индексов невозможно. Кроме того, использование индексов эффективно лишь для тех контейнеров, у которых доступ к произвольному элементу по индексу возможен за константное время, что не выполняется, например, для связных списков.

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

Что же касается скорости, то мне приходилось видеть разные тесты (пример) и, как правило, результаты были очень близки. Достаточно близки для того, чтобы не менять один работающий вариант кода на другой.



Комментарии

comments powered by Disqus