2010-02-21 3 views
19

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

+0

http: // stackoverflow.com/questions/1064983/different-types-of-iterators/1065528 # 1065528, http://www.sgi.com/tech/stl/Iterators.html – 2010-02-21 07:32:57

+1

Это хороший источник информации: http: //www.cs .helsinki.fi/u/tpkarkka/alglib/k06/lectures/iterators.html – Manuel

+0

http://www.cplusplus.com/reference/iterator/ – 7bisso

ответ

15

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

2

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

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

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

+1

Это, безусловно, больше, чем массивы, на самом деле сама цель итераторов в C++ состоит в том, чтобы абстрагироваться от самой коллекции и ее свойств, чтобы алгоритмы, касающиеся итераторов, могли быть использованы для любого типа коллекции :) –

1

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

13

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

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

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

+2

Это так, пожалуйста, примите участие, чтобы найти ответы, подобные этим. +1 – 2010-02-21 08:36:43

+0

Спасибо за указатель на книгу, о которой я должен был знать раньше (если не читать). –

2

С. 80 Accelerated C++:

Итератор является значением, которое

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