Форум: "Прочее";
Текущий архив: 2006.11.05;
Скачать: [xml.tar.bz2];
ВнизИтераторы в Delphi Найти похожие ветки
← →
Cyrax © (2006-10-06 00:32) [0]Как их реализовать?
← →
Ketmar © (2006-10-06 00:34) [1]аккуратно.
← →
Cyrax © (2006-10-06 00:37) [2]Ещё как...
← →
Ketmar © (2006-10-06 00:49) [3]ты это... задачу давай. или тебе универсальные надо? тогда тут без нормальных сопроцессов не обойдёшься.
(больная идея: fibers? не пинать -- сам знаю, что больной на голову %-)
← →
Cyrax © (2006-10-06 01:03) [4]А ещё лучше ссылочку, где можно скачать компонент для работы с итераторами... :)/
1. Есть data типа Pointer. Надо пробежаться по n первым элементам типа, например, integer, лежащим по этому указателю.
Желательно без создания дополнительного указателя типа Integer... (*)
Желательно всё в цикле for (а вот это шутка)...
2. Надо получить i-й элемент какого-либо типа по указателю data типа Pointer, используя как можно меньше символов... Желательно 2-3...
(*) в силе.
← →
Ketmar © (2006-10-06 01:20) [5]вряд ли так просто всё получится...
← →
Celades (2006-10-06 01:23) [6]А имеют ли они вообще в Delphi смысл, при отсутсвии в нем парадигмы обобщенного программирования на должном уровне?
← →
vuk © (2006-10-06 01:54) [7]А чего здесь сложного-то? Приводим data к типу "указатель на массив элементов нужного типа" и по индексу берем значение. В общем виде i-й элемент массива любо типа получается добавлением к адресу начала массива i, умноженного на размер элемента.
Правда, это я итераторами не называл бы... :)
← →
Джо © (2006-10-06 03:46) [8]> [4] Cyrax © (06.10.06 01:03)
> 1. Есть data типа Pointer.
Выбросить :)
Переводи в классы и списки классов. Кстати, в BDS2006 можно реализовать (синтаксически) итератор для употребления в новой конструкцииfor ... in
.
← →
MBo © (2006-10-06 06:19) [9]можно посмотреть библиотеки DeCal/SDL
Однако для задач в [4] итераторы не нужны.
← →
vidiv © (2006-10-06 09:52) [10]Что такое итераторы?
← →
Cyrax © (2006-10-06 12:06) [11]vuk © (06.10.06 01:54) [7]
Правда, это я итераторами не называл бы... :)
Сойдёт и так...
Джо © (06.10.06 03:46) [8]
Переводи в классы и списки классов.
В данном случае это крайне неэффективно...
vidiv © (06.10.06 09:52) [10]
Что такое итераторы?
Ето абстракция...
...для управления контейнерами, не зная типов, идентифицирующих элементы...
← →
vuk © (2006-10-06 12:24) [12]to Cyrax © (06.10.06 12:06) [11]:
>для управления контейнерами
Нет. Для перебора элементов.
← →
Cyrax © (2006-10-06 23:14) [13]vuk © (06.10.06 12:24) [12]
> to Cyrax © (06.10.06 12:06) [11]:
>>для управления контейнерами
>Нет. Для перебора элементов.
Нет, всё-таки для управления, поскольку перебор - это всего лишь частный случай использования итераторов...
← →
default © (2006-10-07 00:07) [14]посмотри как сделаны итераторы в .NET, например, в класс Stack, ArrayList, Quene,...
итераторы там просто перебор элементов
← →
default © (2006-10-07 00:11) [15]итератора дословно - перечислитель, ни о каком УПРАВЛЕНИИ речи не идёт
← →
default © (2006-10-07 01:22) [16]Удалено модератором
Примечание: Личная переписка. Чат/почта/аська
← →
Джо © (2006-10-07 02:27) [17]> [13] Cyrax © (06.10.06 23:14)
> vuk © (06.10.06 12:24) [12]
> > to Cyrax © (06.10.06 12:06) [11]:
> >>для управления контейнерами
> >Нет. Для перебора элементов.
>
> Нет, всё-таки для управления, поскольку перебор - это всего
> лишь частный случай использования итераторов...
Как раз наоборот, вроде. :) Перебор, собственно, и есть главная функция итераторов. А "управляем" мы и ими или нет — дело десятое...
← →
vuk © (2006-10-07 11:45) [18]to Cyrax:
Возьмите книжку какую-нибудь, ну хотя бы Буча и посмотрите, как там итераторы описаны.
Кстати, у Буча выделены два типа итераторов - активные и пассивные. Активные - это то, что используется чаще всего(с набором методов/свойств в духе IsDone-Next-Reset-Current). Пассивные - это когда клиент сам перебором не упарвляет, а только передает итератору функцию, которую он вызывает для каждого элемента контейнера. Если кто помнит, то именно так были устроены методы-итераторы в коллекциях TurboVision/OWL.
← →
Cyrax © (2006-10-09 22:34) [19]Удалено модератором
Примечание: Личная переписка. Чат/почта/аська
← →
Kolan © (2006-10-09 22:35) [20]
> Cyrax © (06.10.06 00:32)
До итератора я еще не дочитал, но там же есть UML диаграммы на все паттерны.
← →
Юрий Зотов © (2006-10-09 23:11) [21]Аффигеть...
Простейший цикл... простейший проход по массиву/списку/коллекции объектов... а как много "хвилософфии"...
Аффигеть....
PS
После знакомства с Джавой не могу отделаться от ощущения, что мир катится к ламеризму.
Не стану утверждать, что это ощущение безусловно верно, но все же плдтверждения тому есть.
Это еще одно?
← →
Kolan © (2006-10-09 23:12) [22]
> После знакомства с Джавой
Шас придет iZEN :)
← →
Cyrax © (2006-10-09 23:20) [23]Юрий Зотов © (09.10.06 23:11) [21]
Аффигеть...
Простейший цикл... простейший проход по массиву/списку/коллекции объектов... а как много "хвилософфии"...
Аффигеть...
После знакомства с Джавой не могу отделаться от ощущения, что мир катится к ламеризму.
Я просто тащщусь от такого запала... (в хорошем смысле, конечно)
Kolan © (09.10.06 23:12) [22]
> После знакомства с Джавой
Шас придет iZEN :)
Давай его сюда. Щас споём... (ну, :))
← →
Джо © (2006-10-09 23:20) [24]> [21] Юрий Зотов © (09.10.06 23:11)
> Аффигеть...
>
> Простейший цикл... простейший проход по массиву/списку/коллекции
> объектов... а как много "хвилософфии"...
Ну почему хвилософии? Один из видов итераторов: передача параметра процедурного типа, который будет вызываться для каждого элемента коллекции, иногда ведь удобно.
← →
jack128 © (2006-10-09 23:26) [25]Юрий Зотов © (09.10.06 23:11) [21]
с другой сторому принцип "Keep It Simple, Stupid" никто не отменял. А людей, которые понимают его - не так и много. Вот и приходится принудительно заставлять народ следовать ему...
← →
Ketmar © (2006-10-09 23:30) [26]>[25] jack128(c) 9-Oct-2006, 23:26
>принцип "Keep It Simple, Stupid"
хорош, когда
а) его не навязывают;
б) оно-таки simple.
%-)
← →
jack128 © (2006-10-09 23:42) [27]jack128 © (09.10.06 23:26) [25]
с другой стороНЫ естественно
Ketmar © (09.10.06 23:30) [26]
а) его не навязывают;
не знаю... Может быть, а может и нет. Например, стиль форматирования я себе навязывал. Точему тут этот фокус не пройдет ?
Ketmar © (09.10.06 23:30) [26]
б) оно-таки simple.
ну ты еще скажи, что джава (как язык) - сложна ;-)
← →
Джо © (2006-10-09 23:43) [28]> [27] jack128 © (09.10.06 23:42)
> Ketmar © (09.10.06 23:30) [26]
> б) оно-таки simple.
> ну ты еще скажи, что джава (как язык) - сложна ;-)
Как язык несложна. Но такая муть :)
← →
Zeqfreed © (2006-10-09 23:57) [29]> [28] Джо © (09.10.06 23:43)
Тсс! Сейчас iZEN прийдет! :)
← →
isasa © (2006-10-10 00:02) [30]Долго крепился, но влезу.
Это от того, что при варианте
type *var; // type var[];
type **var; // type var[][];
с последующей
var = (type*)calloc(nSize, typeof(type));
...
Ну очень надо помнить nSize в дальнейшем. Что дико раздражает, когда сравниваешь с динамическими массивамив Дельфи. :)
← →
Юрий Зотов © (2006-10-10 00:06) [31]> Джо © (09.10.06 23:20) [24]
> Ну почему хвилософии?
Потому что "передача параметра процедурного типа, который будет вызываться для каждого элемента коллекции" - это 11 слов.
А "callback" - это 1 слово. Причем придуманное давным-давно.
"Keep It Simple".
:o)
> jack128 © (09.10.06 23:26) [25]
> А людей, которые понимают его - не так и много. Вот и приходится
> принудительно заставлять народ следовать ему...
Вот именно поэтому такое ощущение и сложилось.
"Хищные вещи века"...
← →
Джо © (2006-10-10 00:08) [32]> [31] Юрий Зотов © (10.10.06 00:06)
> > Джо © (09.10.06 23:20) [24]
>
> > Ну почему хвилософии?
>
> Потому что "передача параметра процедурного типа, который
> будет вызываться для каждого элемента коллекции" - это 11
> слов.
>
> А "callback" - это 1 слово. Причем придуманное давным-давно.
А, Вы об этом. Ну, так я это исключительно в описательных целях. Ибо, на разъяснение понятия "колбэк" — как раз и нужно около 11 слов. У кого выйдет больше — я не виноват :)
← →
Ketmar © (2006-10-10 00:15) [33]>[30] isasa(c) 10-Oct-2006, 00:02
>type *var; // type var[];
>type **var; // type var[][];
>с последующей
>var = (type*)calloc(nSize, typeof(type));
а это и не жаба уже вовсе, на?
← →
isasa © (2006-10-10 00:20) [34]Ketmar © (10.10.06 00:15) [33]
Угу.
Жаба еще не успела достать.
← →
Ketmar © (2006-10-10 00:21) [35]да ладно тебе. не, писал я на ней немного. язык как язык -- в меру глупый, в меру простой. вот библиотеки... это да. %-)
← →
isasa © (2006-10-10 00:27) [36]Ketmar © (10.10.06 00:21) [35]
вот библиотеки... это да.
Ооо! Это отдельная песня. Мне NetBeans предложил >400 штук и я прозрел и понял, что выбирать долго придется.
Счастливые люди, я их понимаю - JBoss, остальных на костер :)
← →
Юрий Зотов © (2006-10-10 00:30) [37]> Ketmar © (10.10.06 00:21) [35]
Даже и в языке - убивает хотя бы обилие скобок. Наследие C ?
if (лог_выражение)...
Мы не в силах распознать лог_выражение и без скобок?
obj.func()
Мы не в силах отличить метод от поля и без скобок?
И т.д. А в итоге 4 и более закрывающие скобки подряд - это норма.
Раздражает.
← →
Ketmar © (2006-10-10 00:31) [38]>[37] Юрий Зотов(c) 10-Oct-2006, 00:30
>Даже и в языке - убивает хотя бы обилие скобок. Наследие C?
таки да. специально делали на цэ похожим -- чтобы народ переманивать было проще. %-(
← →
jack128 © (2006-10-10 00:36) [39]Ketmar © (10.10.06 0:31) [38]
таки да. специально делали на цэ похожим -- чтобы народ переманивать было проще. %-(
ну дык в дельфи же тоже можно писать:
if (a = b) then
c();
но никто не говорит, что дельфя сишников переманивает :-D
← →
Джо © (2006-10-10 00:38) [40]> [39] jack128 © (10.10.06 00:36)
> Ketmar © (10.10.06 0:31) [38]
> таки да. специально делали на цэ похожим -- чтобы народ
> переманивать было проще. %-(
>
> ну дык в дельфи же тоже можно писать:
> if (a = b)
> then
> c();
> но никто не говорит, что дельфя сишников переманивает :-
> D
А вот делфистов на Це переманить сложнее, ибо
if a = b then
c;
писать там нельзя :)
← →
Джо © (2006-10-10 00:39) [41]А оператор for, который прямо то ли оператор, то ли функция, это всегда (у меня) вызывает маленький взрыв в голове :)
← →
Германн © (2006-10-10 00:42) [42]
> if (лог_выражение)...
> Мы не в силах распознать лог_выражение и без скобок?
>
К великому моему сожалению знаю и паскаль-компиллятор такой :-)
Хотя он просто недоделанный, имхо. :-(
← →
default © (2006-10-10 00:49) [43]Джо © (10.10.06 00:39) [41]
сишный for это потенциально адская машина, только обычно она используется в "ангельском" режиме:)
← →
Джо © (2006-10-10 01:00) [44]> [43] default © (10.10.06 00:49)
> Джо © (10.10.06 00:39) [41]
> сишный for это потенциально адская машина, только обычно
> она используется в "ангельском" режиме:)
Это чертовски здорово сказано.
← →
vuk © (2006-10-10 01:06) [45]to Юрий Зотов © (09.10.06 23:11) [21]:
>Простейший цикл... простейший проход по массиву/списку/коллекции
>объектов... а как много "хвилософфии"...
Хвилософия, она иной раз полезная бывает. Имея итератор в качестве абстракции можно реализовать эффективный перебор коллекций (не имею в виду TCollection), устроенных совершенно по-разному, например масив и список(настоящий, а не TList). Структуры данных совершенно разные, методы доступа тоже, но итератор позволяет делать перебор в клиентском коде совершенно одинаково. Code Reuse, однако. :)
← →
Ketmar © (2006-10-10 01:41) [46]сишный фор -- это тяжёлое наследие макросов и комбайнов. %-)
← →
Zeqfreed © (2006-10-10 07:23) [47]> [46] Ketmar © (10.10.06 01:41)
Зато, с ним порою можно проделывать презабавнейшие вещи :)
Конечно, если потом пытаться разобрать чужой код с такими извратами, то начинаешь потихоньку ненавидеть автора такого синтаксиса.
Что касается скобок, то я в Delphi практически всегда ставлю скобки вокруг логических выражений и после вызова ф-ций с пустым списком параметров. В то же время, возможность их иногда не ставить в угоду удобочитаемости является несомненным плюсом, хоть и отрицательно влияет на единообразность кода.
← →
Cyrax © (2006-10-10 08:30) [48]Насчёт сишного оператора for. Реализован максимально гибко и качественно.
А вот "извраты", которые с ним можно сотворить - это всё на совести извращенцев. Нам же предоставляется гибкий инструмент, который не обязан быть урезанным (по современным меркам) только из-за того, что с ним можно извращаться.
(Кстати, подобное мнение есть и относительно C#: "Трудности новичков нельзя рассматривать когда мы говорим о профессиональных прграммистах, это похоже на принятие закона, что все велосипеды должны быть трехколесными, потому что маленьким детям трудно без них ездить". Доля правдя в этом есть. Есть и такое мнение: "Безусловно, победит подход C#. Это объективный процесс, который не остановить. Низкоуровневые оптимизации уходят из рабочего процесса программистов". И в этом есть доля правды, хотя предпочитаю переход на C#-подобные средства только после изучения этих "низкоуровневых оптимизаций".)
Что касается паскаля, то его for откровенно слаб в этом отношении (опять-таки по современным меркам)...
← →
default © (2006-10-10 09:03) [49]ну что ты
> Итераторы в Delphi
> Как их реализовать?
выполнил задуманное?
← →
Cyrax © (2006-10-10 09:18) [50]default © (10.10.06 09:03) [49]
выполнил задуманное?
Которое ето - да, то - ещё нет...
← →
default © (2006-10-10 09:24) [51]Cyrax © (10.10.06 09:18) [50]
> Которое ето - да, то - ещё нет...
я про которое ето
покажи что накодил(
← →
Cyrax © (2006-10-10 09:27) [52]Ето - совсем не итераторы. Итераторы я не кодил...
То - это уже что-то. Покажу, когда закончу...
← →
Юрий Зотов © (2006-10-10 10:14) [53]> vuk © (10.10.06 01:06) [45]
> Хвилософия, она иной раз полезная бывает.
Бывает, Леш. Но только тогда, когда она не из пальца высосана и не за уши притянута. Иными словами, когда она введена для дела, а не выпендрежа лишь ради - такое тоже бывает.
> Имея итератор в качестве абстракции можно реализовать эффективный
> перебор коллекций (не имею в виду TCollection), устроенных совершенно
> по-разному, например масив и список(настоящий, а не TList). Структуры
> данных совершенно разные, методы доступа тоже, но итератор позволяет
> делать перебор в клиентском коде совершенно одинаково.
Леш, вот эти 2 строки дают ровно то же самое (использую синтаксис Delphi, но это не значит, что имеется в виду только она):property Count: integer...
property Items[Index: integer]: TObject... ;
Ты прекрасно понимаешь, что на любом ОО-языке не представляет абсолютно никакой проблемы создать внутри любого класса-списка (массива, коллекции...) некий публичный подкласс-итератор, унаследованный от стандартного предка и имеющий стандартные методы (First, Last, Next, Prev, HasNext, HasPrev и т.д.).
Но... вот эти 2 две простейшие строчки дают ровно то же самое. И без всяких классов-посредников, на фиг в данном случае не нужных.
Keep It Simple, понимаешь? Это значит, что не надо притягивать философию за уши и высасывать ее из пальца. Лучше оставить ее для более серьезных вещей, где она действительно нужна. Иначе она становится "хвилософфией".
← →
vuk © (2006-10-10 10:33) [54]to Cyrax © (10.10.06 08:30) [48]:
>Что касается паскаля, то его for откровенно слаб в этом отношении (опять-
>таки по современным меркам)...
В паскале for реализует цикл со счетчиком. Все. Никаких других функций и заморочек. Хочется другого - используется другой вид цикла.
to Юрий Зотов © (10.10.06 10:14) [53]:
>Но только тогда, когда она не из пальца высосана и не за уши притянута.
Бывает. Что лично я в данном конкретном случае делал бы, я уже писал в своем ответе автору ветки.
>Но... вот эти 2 две простейшие строчки дают ровно то же самое.
Оно конечно да. Только вот не для всех структур данных индексный метод доступа эффективен, я специально списочные структуры упоминал.
← →
Sandman29 © (2006-10-10 10:49) [55]Юрий Зотов
Даже ненависть к Java не поможет реализовать Iterator с помощью только Count и Items. В каких случаях? Сами догадайтесь, чтобы не пришлось читать LMD.
Вот Вам подсказка.
Interface Iterator<E>
boolean hasNext() Returns true if the iteration has more elements.
E next() Returns the next element in the iteration.
void remove() Removes from the underlying collection the last element returned by the iterator (optional operation)
← →
Игорь Шевченко © (2006-10-10 11:25) [56]Юрий Зотов © (09.10.06 23:11) [21]
> После знакомства с Джавой не могу отделаться от ощущения,
> что мир катится к ламеризму.
А мужики-то и не знают...Пишут себе. Потихоньку на C# с его скобками переползают, катятся туда же.
Дядьки там буржуйские всякие паттерны придумывают - нафига, спрашивается ?
← →
pasha_golub © (2006-10-10 12:50) [57]Хочу видеть пример итератора, аж кипятком писаю.
> Sandman29 © (10.10.06 10:49) [55]
> Даже ненависть к Java не поможет реализовать Iterator с
> помощью только Count и Items.
Я - ламер! Можно мне ответ на этот вопрос увидеть?
← →
Sandman29 © (2006-10-10 12:52) [58]pasha_golub © (10.10.06 12:50) [57]
Конечно, можно. Задайся вопросом - всегда ли известен Count.
← →
pasha_golub © (2006-10-10 12:55) [59]
> Sandman29 © (10.10.06 12:52) [58]
>
> pasha_golub © (10.10.06 12:50) [57]
>
> Конечно, можно. Задайся вопросом - всегда ли известен Count.
>
При нормальной проектировке всегда. Ведь при добавлении итема, я могу увеличивать счетчик количества, а при удалении (будь-то даже стек или очередь) уменьшать.
← →
Sandman29 © (2006-10-10 12:58) [60]pasha_golub © (10.10.06 12:55) [59]
А при чем здесь очередь? Это же универсальный итератор.
Например, SELECT FIRST 20 FROM, зачем SELECT NEXT 20 и т.д. Заранее неизвестно, на каком селекте будет облом и сколько именно записей вернется.
← →
default © (2006-10-10 13:08) [61]+[60]
да взять хотя бы текстовый файл и его итерирование по строкам
чтобы узнать число строк надо прочитать весь файл, что ни в какие ворота не лезет
← →
Игорь Шевченко © (2006-10-10 13:16) [62]pasha_golub © (10.10.06 12:55) [59]
Не всегда. Например, при выборке из базы данных
← →
pasha_golub © (2006-10-10 13:31) [63]Значит я не понимаю сути итератора. :-)
← →
Игорь Шевченко © (2006-10-10 13:32) [64]pasha_golub © (10.10.06 13:31) [63]
> Значит я не понимаю сути итератора
Читай и воздастся тебе по чтению твоему.
← →
pasha_golub © (2006-10-10 13:39) [65]
> Игорь Шевченко © (10.10.06 13:32) [64]
> Читай и воздастся тебе по чтению твоему.
>
В каком источнике мудрость сия?
← →
default © (2006-10-10 13:41) [66]pasha_golub © (10.10.06 13:31) [63]
что может быть непонятно?
если брать пример с текстовым файлов
пусть размер этого файла - 2 гига
а мне надо проитерировать(просмотреть) первые две строки файла
(возможно другое количество, короче это неизвестно на стадии разработки)
так вот ради этих двух строк если использовать вариант с Count придётся перешерстить все 2 гига для подсчёта количества строк притом для того чтобы перебрать каких-то две первые строчки файла
как?
← →
default © (2006-10-10 13:44) [67]вот простой интерфейс итератора
public interface IEnumerator
{
// Interfaces are not serializable
// Advances the enumerator to the next element of the enumeration and
// returns a boolean indicating whether an element is available. Upon
// creation, an enumerator is conceptually positioned before the first
// element of the enumeration, and the first call to MoveNext
// brings the first element of the enumeration into view.
//
bool MoveNext();
// Returns the current element of the enumeration. The returned value is
// undefined before the first call to MoveNext and following a
// call to MoveNext that returned false. Multiple calls to
// GetCurrent with no intervening calls to MoveNext
// will return the same object.
//
Object Current {
get;
}
// Resets the enumerator to the beginning of the enumeration, starting over.
// The preferred behavior for Reset is to return the exact same enumeration.
// This means if you modify the underlying collection then call Reset, your
// IEnumerator will be invalid, just as it would have been if you had called
// MoveNext or Current.
//
void Reset();
}
← →
Игорь Шевченко © (2006-10-10 13:46) [68]pasha_golub © (10.10.06 13:39) [65]
> В каком источнике мудрость сия?
Э. Гамма, Р. Хелм, Р. Джонсон, Дж. Влиссидес
"Приемы объектно-ориентированного проектирования. Паттерны проектирования"
← →
han_malign © (2006-10-10 13:49) [69]
> Заранее неизвестно, на каком селекте будет облом и сколько именно записей вернется.
> да взять хотя бы текстовый файл и его итерирование по строкам
> чтобы узнать число строк надо прочитать весь файл, что ни в какие ворота не лезет
- ну, если зарание не известно какой контейнер используется - с произвольным доступом, или с последовательным - тогда итераторы это насущная необходимость... Но тут нужно для себя решить - инженер-программист я, который всегда знает когда и что делает, или "просто программист", который во всех случаях использует толстые интерфейсы, не задумываясь что - цитирую:
> > Переводи в классы и списки классов.
> В данном случае это крайне неэффективно...
← →
Игорь Шевченко © (2006-10-10 13:55) [70]han_malign © (10.10.06 13:49) [69]
> - ну, если зарание не известно какой контейнер используется
> - с произвольным доступом, или с последовательным - тогда
> итераторы это насущная необходимость... Но тут нужно для
> себя решить - инженер-программист я, который всегда знает
> когда и что делает, или "просто программист", который во
> всех случаях использует толстые интерфейсы
А думать надо не только о себе.
← →
default © (2006-10-10 14:01) [71]han_malign © (10.10.06 13:49) [69]
в универсальных методах обычно типичные входные данные обрабатывают оптимальным образом, а все остальные - не очень оптимальным, зато универсальным
типовая практика
← →
vuk © (2006-10-10 15:11) [72]to default © (10.10.06 14:01) [71]:
>а все остальные - не очень оптимальным, зато универсальным
Так вот как раз итераторы и позволяют универсальность с оптимальностью подружить.
← →
Cyrax © (2006-10-14 01:45) [73]default © (07.10.06 00:07) [14]
посмотри как сделаны итераторы в .NET, например, в класс Stack, ArrayList, Quene,...
итераторы там просто перебор элементов
Это частичная реализация итераторов в широком (и общепринятом) понимании. В Delphi, например, вообще не используется термин "итератор". Но это не значит, что их нет...
итератора дословно - перечислитель, ни о каком УПРАВЛЕНИИ речи не идёт
Дословный перевод не всегда адекватно и полно отражает смысл, заложенный в термин. В данном случае итератор следует рассматривать именно как абстракцию, обобщающую понятие указателя...
Джо © (07.10.06 02:27) [17]
Как раз наоборот, вроде. :) Перебор, собственно, и есть главная функция итераторов. А "управляем" мы и ими или нет — дело десятое...
Возможно так обстоит дело с C#. Но не с Python и C++...
Юрий Зотов © (09.10.06 23:11) [21]
Простейший цикл... простейший проход по массиву/списку/коллекции объектов... а как много "хвилософфии"...
Нет, не простейший проход. Вспомним итераторы ввода, итераторы вывода,
двунаправленные итераторы, последовательные итераторы, итераторы обмена, итераторы произвольного доступа и др.
Функциональность и назначение итераторов в большей мере схожа с функциональностью и назначением указателей, а не с переменной цикла в пакалевском for...
После знакомства с Джавой не могу отделаться от ощущения, что мир катится к ламеризму.
Не стану утверждать, что это ощущение безусловно верно, но все же плдтверждения тому есть.
Это еще одно?
Да, катится. И очень быстро...
isasa © (10.10.06 00:02) [30]
Долго крепился, но влезу.
Это от того, что при варианте
type *var; // type var[];
type **var; // type var[][];
с последующей
var = (type*)calloc(nSize, typeof(type));
...
Ну очень надо помнить nSize в дальнейшем. Что дико раздражает, когда сравниваешь с динамическими массивамив Дельфи. :)
Не хуже, чем статические массивы паскаля...
А для этих целей нужно использовать динамические массивы C++...
Юрий Зотов © (10.10.06 00:30) [37]
Даже и в языке - убивает хотя бы обилие скобок. Наследие C ?
if (лог_выражение)...
Мы не в силах распознать лог_выражение и без скобок?
И не в силах распознать блок операторов без then ?..
И вообще, в if может быть не только логическое выражение... и много чего ещё... Это всё в сторону гибкости и эффективности...
obj.func()
Мы не в силах отличить метод от поля и без скобок?
Удобочитаемость кода. Не думаю, что поставить две скобки сложнее, чем написать begin, end, then и т.п.
Юрий Зотов © (10.10.06 10:14) [53]
> vuk © (10.10.06 01:06) [45]
> Хвилософия, она иной раз полезная бывает.
Бывает, Леш. Но только тогда, когда она не из пальца высосана и не за уши притянута. Иными словами, когда она введена для дела, а не выпендрежа лишь ради - такое тоже бывает.
Keep It Simple, понимаешь? Это значит, что не надо притягивать философию за уши и высасывать ее из пальца. Лучше оставить ее для более серьезных вещей, где она действительно нужна. Иначе она становится "хвилософфией".
Думаю, это не относится к текущей ветке...
Но... вот эти 2 две простейшие строчки дают ровно то же самое. И без всяких классов-посредников, на фиг в данном случае не нужных.
В C++ никаких классов посредников для этих целей (я об итераторах) не используется... Кроме того, итераторы в C++ реализованы на уровне стандарта, что сильно облегчает жизнь ~трудящихся~...
vuk © (10.10.06 10:33) [54]
to Cyrax © (10.10.06 08:30) [48]:
>Что касается паскаля, то его for откровенно слаб в этом отношении (опять-
>таки по современным меркам)...
В паскале for реализует цикл со счетчиком. Все. Никаких других функций и заморочек. Хочется другого - используется другой вид цикла.
А вот "другое" потребует лишних "заморочек" (и не малых) в других циклах. Банальная потребность в указании шага - и придётся задействовать while или repeat, где уже теряется лаконичность, удобочитаемость и эффективность кода...
Но только тогда, когда она не из пальца высосана и не за уши притянута.
Бывает. Что лично я в данном конкретном случае делал бы, я уже писал в своем ответе автору ветки.
Всё номёками да номёками... про кокую философию речь-то идёт ?
Игорь Шевченко © (10.10.06 11:25) [56]
Дядьки там буржуйские всякие паттерны придумывают - нафига, спрашивается ?
"В частности, данное средство позволяет проектировать эффективные, компактные и безопасные с точки зрения типов контейнерные классы и удобно ими пользоваться. Без шаблонов проектировщику пришлось бы прибегать к к слабо или динамически типизированным вариантам, что отрицательно сказалось бы на структуре и эффективности программы"
← →
Anatoly Podgoretsky © (2006-10-14 12:11) [74]Ketmar © (10.10.06 01:41) [46]
Не называй это FOR это просто слова похожие, это вообще то WHILE
← →
Ketmar © (2006-10-15 18:10) [75]>[74] Anatoly Podgoretsky(c) 14-Oct-2006, 12:11
>Не называй это FOR это просто слова похожие, это вообще то
>WHILE
ну так я и говорю -- комбайн. а фором его Керниган с Ричи назвали. %-)
← →
Cyrax © (2006-10-15 19:58) [76]vuk © (07.10.06 11:45) [18]
to Cyrax:
Возьмите книжку какую-нибудь, ну хотя бы Буча...
Можно сцылку. А то скачал одну - но не ту...
Страницы: 1 2 вся ветка
Форум: "Прочее";
Текущий архив: 2006.11.05;
Скачать: [xml.tar.bz2];
Память: 0.69 MB
Время: 0.04 c