crossplatform.ru

Здравствуйте, гость ( Вход | Регистрация )

 
Ответить в данную темуНачать новую тему
> Нужны ли итераторы там, где есть foreach
Litkevich Yuriy
  опции профиля:
сообщение 17.2.2010, 19:01
Сообщение #1


разработчик РЭА
*******

Группа: Сомодератор
Сообщений: 9669
Регистрация: 9.1.2008
Из: Тюмень
Пользователь №: 64

Спасибо сказали: 807 раз(а)




Репутация:   94  


Вот возник у меня такой вопрос:
Цитата
Нужны ли итераторы там, где есть foreach и его аналоги?

Например в Qt есть оператор foreach, позволяющий перебрать элементы в контейнере. В некоторых языках программирования есть его аналог, например:
Цитата
for itemVar in containerVar


В данный момент я вижу только одну ситуацию, где может потребоваться итератор - когда нужно получить ключ элемента, а не только значение. Например в QPair, QMap и т.п.
Т.к., если я не ошибаюсь, с помощью foreach и его аналогов, нельзя понять к какому элементу относится текущее значение.
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
Tonal
  опции профиля:
сообщение 17.2.2010, 20:05
Сообщение #2


Активный участник
***

Группа: Участник
Сообщений: 452
Регистрация: 6.12.2007
Из: Новосибирск
Пользователь №: 34

Спасибо сказали: 69 раз(а)




Репутация:   17  


Итератор - очень мощная концепция.
Например с их помощью можно реализовать отложнные вычисления. (см. Boost, Python, Haskell) :)
Кроме того, их можно передавать в обобщённые алгоритмы. :)
foreach всего лишь один из них - самый простой. :)
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
Litkevich Yuriy
  опции профиля:
сообщение 17.2.2010, 20:28
Сообщение #3


разработчик РЭА
*******

Группа: Сомодератор
Сообщений: 9669
Регистрация: 9.1.2008
Из: Тюмень
Пользователь №: 64

Спасибо сказали: 807 раз(а)




Репутация:   94  


Цитата(Tonal @ 17.2.2010, 23:05) *
Кроме того, их можно передавать в обобщённые алгоритмы.
ещё один случай.
Может какие-нибудь ещё вспомнятся, так сказать насобирать, краткий списочек.
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
Tonal
  опции профиля:
сообщение 17.2.2010, 21:49
Сообщение #4


Активный участник
***

Группа: Участник
Сообщений: 452
Регистрация: 6.12.2007
Из: Новосибирск
Пользователь №: 34

Спасибо сказали: 69 раз(а)




Репутация:   17  


Стандартный <algorithm>
boost.algorithm, boost.iterator, boost.range, boost.graph, boost.gil...
ну там много, практически все контейнеры предоставляют итераторы и инициализируются с них...
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
kwisp
  опции профиля:
сообщение 18.2.2010, 11:23
Сообщение #5


астарожна ынтжинэр
*****

Группа: Участник
Сообщений: 1404
Регистрация: 26.11.2008
Из: ТаганрогРодинаЧехова
Пользователь №: 435

Спасибо сказали: 113 раз(а)




Репутация:   23  


к примеру, итератор может содержать указатель на следующий/предыдущий элемент, может быть интерактивным - т.е получив его один раз по идее и сохранив его, при изменении контейнера он будет хранить верное значение.

Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
Iron Bug
  опции профиля:
сообщение 20.2.2010, 23:23
Сообщение #6


Профессионал
*****

Группа: Модератор
Сообщений: 1611
Регистрация: 6.2.2009
Из: Yekaterinburg
Пользователь №: 533

Спасибо сказали: 219 раз(а)




Репутация:   12  


я думаю, что "итерабельны" только упорядоченные множества: у них есть начало, конец и направление. а foreach, вообще говоря, может быть определён на любом множестве.

Сообщение отредактировал Iron Bug - 20.2.2010, 23:23
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
Tonal
  опции профиля:
сообщение 23.2.2010, 18:41
Сообщение #7


Активный участник
***

Группа: Участник
Сообщений: 452
Регистрация: 6.12.2007
Из: Новосибирск
Пользователь №: 34

Спасибо сказали: 69 раз(а)




Репутация:   17  


Это близнецы-братья, как Партия и Ленин. :)
Там, где можно определить foreach можно и итератор нарисовать и наоборот.
Для прочищения мозгов в этом направлении очень помогает изучение Haskell-я и Python-а
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение

Быстрый ответОтветить в данную темуНачать новую тему
Теги
Нет тегов для показа


2 чел. читают эту тему (гостей: 2, скрытых пользователей: 0)
Пользователей: 0




RSS Текстовая версия Сейчас: 22.12.2024, 14:18