перечислитель или итератор? - PullRequest
0 голосов
/ 30 мая 2011

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

Ответы [ 2 ]

0 голосов
/ 30 мая 2011

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

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

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

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

Итераторы - это стандартная библиотека C ++ для перечислителя. Выбор «итератора» вместо «перечислителя», вероятно, был сделан намеренно, чтобы избежать путаницы с существующей концепцией языка перечислений.

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

0 голосов
/ 30 мая 2011

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

Перечисление или перечисление - это вообще что-то другое.

...