Что такое итераторы C ++? - PullRequest
       46

Что такое итераторы C ++?

21 голосов
/ 21 февраля 2010

Что такое итераторы в C ++?

Ответы [ 5 ]

16 голосов
/ 21 февраля 2010

Итераторы - это способ обхода коллекции объектов. Как правило, они позволяют вам получить доступ к контейнеру STL (Standard Template Library) последовательно, аналогично доступу к классическому массиву C с указателем. Чтобы получить доступ к объекту через итератор, вы разыменовываете его как указатель Си. Чтобы получить доступ к следующему объекту в коллекции, вы используете оператор приращения (++). Некоторые контейнеры имеют несколько видов итераторов, которые позволяют вам проходить по коллекции разными способами.

12 голосов
/ 21 февраля 2010

Хотя поначалу это кажется довольно очевидным, на самом деле это более глубокий вопрос, чем вы можете себе представить. Вместе с Полом МакДжонсом Александр Степанов (дизайнер оригинала, для тех, кто не знает об этом) недавно выпустил книгу под названием Элементы программирования (она же EOP). Вся шестая глава этой книги посвящена конкретно итераторам, и большая часть остальной части книги также тесно связана с итераторами. Любой, кто действительно хочет знать итераторы во всех подробностях, может подумать о прочтении этой книги.

Предупреждение: EOP не для слабонервных. Это относительно короткий (~ 260 страниц), но довольно плотный. Судя по опыту, раннее начало немного сбивает с толку. Моя первая реакция на первую главу была более или менее «ну, это так очевидно, что вряд ли стоит читать. В конце концов, я начал программировать до прошлой недели!»

К счастью, я посмотрел на упражнения и попытался выполнить пару - и хотя я считал предметы очевидными, упражнения требуют строгих доказательств. Это похоже на просьбу доказать (в математическом смысле), что вода мокрая. В конце концов вам просто нужно прочитать эту главу пару раз, чтобы забыть о своем предвзятом представлении о том, что вы уже знаете ответы, чтобы вы могли взглянуть на реальный вопрос - что на самом деле означает «мокрая»; Каковы основные характеристики "сырости"?

2 голосов
/ 21 февраля 2010

с с. 80 из Ускоренный C ++ :

Итератор - это значение, которое

  • Идентифицирует контейнер и элемент в контейнере.
  • Позволяет нам проверить значение, хранящееся в этом элементе
  • Предоставляет операции для перемещения между элементами в контейнере
  • Ограничивает доступные операции способами, которые соответствуют тому, что контейнер может эффективно обрабатывать
2 голосов
/ 21 февраля 2010

http://en.wikipedia.org/wiki/Iterator

Что-то, что позволяет вам просматривать все в массиве, один за другим.

В c ++, я думаю, вы говорите о "for_each" ... Насколько я знаю, C ++ на самом деле не имеет "foreach" в отличие от языков, подобных C #. Однако в стандартной библиотеке шаблонов она есть.

1 голос
/ 21 февраля 2010

Они представляют позицию в последовательности. Сами по себе они немного больше, чем курьезы, но при разыменовании они приводят к значению, содержащемуся в последовательности в позиции, которую она представляет.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...