![]() |
Здравствуйте, гость ( Вход | Регистрация )
![]() ![]() |
![]() |
Litkevich Yuriy |
![]() ![]()
Сообщение
#1
|
![]() разработчик РЭА ![]() ![]() ![]() ![]() ![]() ![]() ![]() Группа: Сомодератор Сообщений: 9669 Регистрация: 9.1.2008 Из: Тюмень Пользователь №: 64 Спасибо сказали: 807 раз(а) Репутация: ![]() ![]() ![]() |
Вот возник у меня такой вопрос:
Цитата Нужны ли итераторы там, где есть foreach и его аналоги? Например в Qt есть оператор foreach, позволяющий перебрать элементы в контейнере. В некоторых языках программирования есть его аналог, например: Цитата for itemVar in containerVar В данный момент я вижу только одну ситуацию, где может потребоваться итератор - когда нужно получить ключ элемента, а не только значение. Например в QPair, QMap и т.п. Т.к., если я не ошибаюсь, с помощью foreach и его аналогов, нельзя понять к какому элементу относится текущее значение. |
|
|
Tonal |
![]()
Сообщение
#2
|
![]() Активный участник ![]() ![]() ![]() Группа: Участник Сообщений: 452 Регистрация: 6.12.2007 Из: Новосибирск Пользователь №: 34 Спасибо сказали: 69 раз(а) Репутация: ![]() ![]() ![]() |
Итератор - очень мощная концепция.
Например с их помощью можно реализовать отложнные вычисления. (см. Boost, Python, Haskell) ![]() Кроме того, их можно передавать в обобщённые алгоритмы. ![]() foreach всего лишь один из них - самый простой. ![]() |
|
|
Litkevich Yuriy |
![]()
Сообщение
#3
|
![]() разработчик РЭА ![]() ![]() ![]() ![]() ![]() ![]() ![]() Группа: Сомодератор Сообщений: 9669 Регистрация: 9.1.2008 Из: Тюмень Пользователь №: 64 Спасибо сказали: 807 раз(а) Репутация: ![]() ![]() ![]() |
|
|
|
Tonal |
![]()
Сообщение
#4
|
![]() Активный участник ![]() ![]() ![]() Группа: Участник Сообщений: 452 Регистрация: 6.12.2007 Из: Новосибирск Пользователь №: 34 Спасибо сказали: 69 раз(а) Репутация: ![]() ![]() ![]() |
Стандартный <algorithm>
boost.algorithm, boost.iterator, boost.range, boost.graph, boost.gil... ну там много, практически все контейнеры предоставляют итераторы и инициализируются с них... |
|
|
kwisp |
![]()
Сообщение
#5
|
![]() астарожна ынтжинэр ![]() ![]() ![]() ![]() ![]() Группа: Участник Сообщений: 1404 Регистрация: 26.11.2008 Из: ТаганрогРодинаЧехова Пользователь №: 435 Спасибо сказали: 113 раз(а) Репутация: ![]() ![]() ![]() |
к примеру, итератор может содержать указатель на следующий/предыдущий элемент, может быть интерактивным - т.е получив его один раз по идее и сохранив его, при изменении контейнера он будет хранить верное значение.
|
|
|
Iron Bug |
![]()
Сообщение
#6
|
![]() Профессионал ![]() ![]() ![]() ![]() ![]() Группа: Модератор Сообщений: 1611 Регистрация: 6.2.2009 Из: Yekaterinburg Пользователь №: 533 Спасибо сказали: 219 раз(а) Репутация: ![]() ![]() ![]() |
я думаю, что "итерабельны" только упорядоченные множества: у них есть начало, конец и направление. а foreach, вообще говоря, может быть определён на любом множестве.
Сообщение отредактировал Iron Bug - 20.2.2010, 23:23 |
|
|
Tonal |
![]()
Сообщение
#7
|
![]() Активный участник ![]() ![]() ![]() Группа: Участник Сообщений: 452 Регистрация: 6.12.2007 Из: Новосибирск Пользователь №: 34 Спасибо сказали: 69 раз(а) Репутация: ![]() ![]() ![]() |
Это близнецы-братья, как Партия и Ленин.
![]() Там, где можно определить foreach можно и итератор нарисовать и наоборот. Для прочищения мозгов в этом направлении очень помогает изучение Haskell-я и Python-а |
|
|
![]() ![]() ![]() |
![]() |
Текстовая версия | Сейчас: 11.3.2025, 17:04 |