#iterator
#итератор
Вопрос:
Когда реализация итератора является лучшей практикой, чем предложение индексации? Когда это лучше, почему?
Я предполагаю, что я являюсь разработчиком класса, который может предложить либо то, либо другое, и необходимо сделать выбор.
Ответ №1:
Потому что большинство коллекций являются итеративными, но немногие коллекции индексируются (например, хэш-таблицы).
Использование итераторов позволяет создавать код, который не заботится о типе каждой коллекции.
Комментарии:
1. Может быть, это дорого, но могу ли я не сортировать ключи карты и хэш-ключи и индексировать их? Я думал, что итераторы — это практика инкапсуляции, и я не привык думать об итераторах как о необходимости из-за затрат (времени).
2. @broiyan: контейнер не индексируется (во всяком случае, каким-либо разумным способом). Вы могли бы извлечь их и проиндексировать самостоятельно, но это не имеет никакого отношения к контейнеру…
3. Я имел в виду, если я являюсь разработчиком контейнера.
4. @broiyan: Как бы вы индексировали хэш-таблицу и при этом могли добавлять в нее элементы?
5. @broiyan: Разве это не привело бы к полному уничтожению цели хэш-таблицы (т. Е. Производительности)?
Ответ №2:
Инкапсуляция: с помощью итератора вам не нужно знать, каковы допустимые индексы.