Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

AlgStr / Библиотека / ЛЕКЦИИ / POSIBNIK / Итераторы

.doc
Скачиваний:
34
Добавлен:
23.03.2015
Размер:
23.55 Кб
Скачать

ИТЕРАТОРЫ

Итератор - абстракция, скрывающая подробности перебора элементов какой-то структуры данных.

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

Итератор выдает результаты не все целиком, а поочередно.

Итератор используется в следующих конструкциях:

for each <для элемента i, возвращаемого итератором А>

do <<выполнить над i некоторое действие D>>

Итератор позволяет разделить действия использования элемента. Он позволяет решить проблемы экономии памяти и времени.

Спецификация итератора:

iname=iter (<аргументы>) gields (<результаты>)

signals (<результаты, возвращаемые по исключительной ситуации>)

Пример. Вычислить сумму элементов множества целых чисел S (на базе массива неповторяющихся элементов)

elements=iter (S:intset) gields(int)

requires S не модифицируется в теле цикла

effects выдает элементы S в некотором произвольном порядке, причем каждый элемент

только один раэ

rep=array[int]

elements=iter(S:int) gields (int)

i:int=rep $ low(s) - нижняя граница индекса массива

while true do

gield(S[i])

except when bounds:returns end

i:=i+1

end

end elements

setsum=proc (S:intset) returns(int)

Sum:int:=0

for el:int in intset $ elements(S)do

Sum:=Sum+el

end for

return (Sum)

end SetSum

intset=cluster is ... elements...

Итераторов для одного типа может быть несколько. Итераторы могут использоваться как фильтры.

Встроенные итераторы языка CLU

from to=iter(x,y:int) gields(int)

effects выдает целые числа между x и y включительно в порядке следования.

filter=iter(S:intset) gields (int)

predicate:proctype(int) returns(bool)

for el:int in elements(S) do

if predicate(el) then

gield(el)

end if

end for

end filter

filter(S, intset $ elements, odd) -выдает только нечетные элементы

****************************************************************************************************

Соседние файлы в папке POSIBNIK