перечислитель или итератор?

#winapi #enums #iterator #iteration

#winapi #перечисления #итератор #итерация

Вопрос:

Я очень новичок в Windows. Когда я работал с WMI, я увидел, что термин не использовался iterator скорее, enum или enumurator использовались для той же цели. У них действительно есть итераторы? или они заменяют термин, iterator перечислением или enum, EnumVariant и т.д….. Или я чего-то не понимаю в iterator и enumurator. Насколько я знал, традиционно термин enum не совпадает с iterator . Я ошибаюсь?

Ответ №1:

Перечисление — это одновременно и вещь (список возможных значений), и действие (пошаговый просмотр каждого элемента в списке). Windows API использует оба термина, полагаясь на контекст для их различения.

Как правило, имена функций и интерфейсов с «Enum» в их названии означают перечислять, например, EnumWindows означает перечислять окна, а IEnumUnknown (COM-интерфейс) означает перечислять неизвестные [объекты].

Windows API не имеет единой методологии перечисления. EnumWindows реализует цикл внутри и повторно вызывает вас обратно через функцию-обработчик, в то время как IEnumUnknown требует, чтобы вызывающий объект написал цикл с использованием функции Next().

Итак, в Windows перечислитель представляет собой широкий класс решений проблемы перемещения по списку элементов.

Итераторы — это концепция перечислителя в стандартной библиотеке C . Выбор ‘iterator’ вместо ‘enumerator’, вероятно, был сделан намеренно, чтобы избежать путаницы с существующей концепцией языка enum.

В отличие от Windows, концепция итератора стандартной библиотеки C очень четко определена: все итераторы работают как указатели; все итераторы требуют, чтобы вызывающий объект написал цикл и т.д. В стандартной библиотеке C есть несколько классов итераторов, которые позволяют получать доступ к элементам линейно, в обратном порядке или случайным образом.

Ответ №2:

Термин перечислитель часто используется как синоним итератора.

Перечисление — это нечто совершенно иное.