С точки зрения С итератор это такой плохой указатель с неочевидным оверхедом. Что удивительно, обратное тоже верно. С точки зрения С++ указатель, это такой unsafe итератор с очевидным отсутствием оверхеда.
Ага, конечно...щаз.
Возьмем к примеру указатель на вершину дерева. И применим к нему оператор ++...
Еще можно порассуждать что происходит "с точки зрения С на итераторы" когда мы работаем с такой коллекцией как std::map.
Если сузить область применения итераторов до std::vector или какого-нибудь boost::scoped_array (которые гарантируют линейное расположение элементов в памяти. вроде. а std::string будет это гарантировать в след. версии языка) то итератор окажется таким себе обычным указателем. Без оверхеда.
Подводя итоги. Дело в том что операторы "++","--","+" и т.д. для итераторов это совсем не то же самое что тот же набор операторов для указателей. Итераторы могут (и будут) переопределить эти операторы. Указатели нет.
Так что с точки зрения С++ указатель это такой unsafe итератор для коллекций гарантирующих линейное расположение обьектов коллекции в памяти. А с точки зрения С итератор это неизвестно что. И это неизвестно что в частных случаях ведет себя точно так же как указатель.
ЗЫ: интересно было бы посмотреть на рассуждения "аллокаторы с точки зрения С это таки е вызовы malloc с оверхедом. Обратное тоже верно...".
Комментариев нет:
Отправить комментарий