вторник, 27 ноября 2007 г.

Об итераторах на геймдеве:
С точки зрения С итератор это такой плохой указатель с неочевидным оверхедом. Что удивительно, обратное тоже верно. С точки зрения С++ указатель, это такой unsafe итератор с очевидным отсутствием оверхеда.


Ага, конечно...щаз.
Возьмем к примеру указатель на вершину дерева. И применим к нему оператор ++...
Еще можно порассуждать что происходит "с точки зрения С на итераторы" когда мы работаем с такой коллекцией как std::map.

Если сузить область применения итераторов до std::vector или какого-нибудь boost::scoped_array (которые гарантируют линейное расположение элементов в памяти. вроде. а std::string будет это гарантировать в след. версии языка) то итератор окажется таким себе обычным указателем. Без оверхеда.

Подводя итоги. Дело в том что операторы "++","--","+" и т.д. для итераторов это совсем не то же самое что тот же набор операторов для указателей. Итераторы могут (и будут) переопределить эти операторы. Указатели нет.

Так что с точки зрения С++ указатель это такой unsafe итератор для коллекций гарантирующих линейное расположение обьектов коллекции в памяти. А с точки зрения С итератор это неизвестно что. И это неизвестно что в частных случаях ведет себя точно так же как указатель.

ЗЫ: интересно было бы посмотреть на рассуждения "аллокаторы с точки зрения С это таки е вызовы malloc с оверхедом. Обратное тоже верно...".

Комментариев нет: