Что такое итераторы и зачем они нужны

1,00
р.
Вот не могу понять основное предназначение итераторов . Погуглив , все равное не понял.
Пожалуйста объясните:
Что такое итератор? Зачем он нужен? Преимущества на указателем Как его описать программно в коде? (то есть сделать свой итератор подобный библиотечным).

Ответ
Смотрите. Пускай у вас есть контейнер. Неважно какой: map, vector, set. Он содержит набор элементов. И вы хотите сослаться не на весь контейнер, а на какое-то место в этом наборе элементов. Так чтобы от этого места можно было перейти вперёд/назад, и что-то в этом месте сделать: изменить элемент, вставить элемент, удалить элемент.
Как это сделать? Для массива вы в таких случаях пользуетесь индексом. set внутри является красно-чёрным деревом, так что вам понадобится ссылка на узел этого дерева. unordered_map использует хэш-таблицу, так что вам нужна пара из хэш-индекса и указателя на элемент внутри bucket'а.
Чтобы не приходилось писать алгоритмы, специфические для каждого контейнера, и были придуманы итераторы.
Итератор — структура данных, которая «указывает» на некоторый элемент контейнера, и (для некоторых контейнеров) умеет переходить к предыдущему/следующему элементу.

Если вы хотите реализовать итератор, помните, что существуют разные типы итераторов, в зависимости от операций, которые они предоставляют. Вот список возможных типов.
Если вы, например, хотите реализовать RandomAccessIterator, вам придётся определить конструктор копирования, оператор присваивания, деструктор, операции ==, !=, *, ->, конструктор без аргументов, ++, --, +=, + (2 шт.), -=, - (2 шт.), <, >, <=, >=. (Другие типы итераторов попроще.)
Кроме того, вам придётся специфицировать std::iterator_traits, где It — тип вашего итератора.

Вот вам заготовка для собственного контейнера на SO. Немало, правда?