когда реализация итератора является лучшей практикой, чем индексирование?

#iterator

#итератор

Вопрос:

Когда реализация итератора является лучшей практикой, чем предложение индексации? Когда это лучше, почему?

Я предполагаю, что я являюсь разработчиком класса, который может предложить либо то, либо другое, и необходимо сделать выбор.

Ответ №1:

Потому что большинство коллекций являются итеративными, но немногие коллекции индексируются (например, хэш-таблицы).

Использование итераторов позволяет создавать код, который не заботится о типе каждой коллекции.

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

1. Может быть, это дорого, но могу ли я не сортировать ключи карты и хэш-ключи и индексировать их? Я думал, что итераторы — это практика инкапсуляции, и я не привык думать об итераторах как о необходимости из-за затрат (времени).

2. @broiyan: контейнер не индексируется (во всяком случае, каким-либо разумным способом). Вы могли бы извлечь их и проиндексировать самостоятельно, но это не имеет никакого отношения к контейнеру…

3. Я имел в виду, если я являюсь разработчиком контейнера.

4. @broiyan: Как бы вы индексировали хэш-таблицу и при этом могли добавлять в нее элементы?

5. @broiyan: Разве это не привело бы к полному уничтожению цели хэш-таблицы (т. Е. Производительности)?

Ответ №2:

Инкапсуляция: с помощью итератора вам не нужно знать, каковы допустимые индексы.