Пишу в данный момент алгоритм построения изображений трассировкой лучей, в качестве основного контейнера решил использовать STL vector. При поиске пересечений требуется перебирать элементы вектора (конечно, я знаю, что брутфорс в этом алгоритме - кощунство, но написание kd tree в процессе, а тестить надо было уже с первых строк кода). Так вот, не думал я, что итераторы настолько тормознутая штука, я предполагал это, но не настолько же.
Сначала я использовал их в своем коде вроде этого:
for (std::vector<ISceneObject*>::iterator i = objects.begin(); i != objects.end(); i++)
{
if ((*i)->Hit(ray, t, info))
{
//...
}
}
Решил переписать по рабоче-крестьянски, используя только индекс на текущий элемент массива. В итоге сцена стала отрисовываться в 2 раза быстрее. Решил потестить в профилировщике VTune, оказалось, что вызов инкремента итератора занимает примерно 0.5 секунды, столько же его разыменование.
Теперь вопрос: это действительно проблема реализации итераторов в STL или это я неправильно их использую?