i
жəне
j
– бір түрдегі итераторлар,
x
– тізбек элементімен
бірдей типтегі элемент,
n
– бүтін шама болсын. Онда келесі өрнектерді
жазуға болады:
i++ ++i i = j i == j i != j
13.1-кесте.
Итераторлардың категориялары
Итератор категориясы
Операциялар
Контейнерлер
кіріс (
input
)
x = *i
барлығы
шығыс (
output
)
*i = x
барлығы
тура (
forward
)
x = *i, *i = x
барлығы
екібағытты
(
bidirectional
)
x = *i
, *i = x,
--i, i--
барлығы
кездейсоқ қол
жеткізілетін
(
random access
)
x = *i, *i = x,
-- i , i--
i + n, i - n, i += n, i -= n
i < j, i > j, i <= j, i >= j
list
класынан
басқаларының
барлығы
Кестеден байқап отырғанымыздай,
тура итератор кіріс жəне шығыс
итераторларының барлық операцияларын сүйемелдейді жəне олар кіріс неме-
се шығыс итераторлары қажет болған барлық жерлерде қолданылуы мүмкін.
Екібағытты итератор тура итератордың барлық операцияларын сүйемелдейді,
декрементті де қолдайды жəне тура итератор қолданылатын барлық жерлер-
де пайдаланылуы мүмкін.
Кездейсоқ қол жеткізілетін итератор екібағытты
итератордың барлық операцияларын сүйемелдейді, сонымен қатар, тізбектің
кездейсоқ элементіне көшуді жəне операторларды салыстыру əрекеттерін де
орындайды.
Итераторлар иерархия құрады деп айтуға болады, оның жоғарғы деңгейінде
кездейсоқ қол жеткізу итераторлары орналасады. Итератордың деңгейі
неғұрлым жоғары болған сайын, ол құрамында жұмыс істейтін контейнер-
ге соғұрлым жоғары функционалдық талаптар қойылады. Мысалы, тізімдер
үшін кездейсоқ қол жеткізу итераторларын қолдануға болмайды, өйткені тізім
итератордың қажетті операциялар жиынтығын сүйемелдемейді.
Итерациялық кластар мен функциялар
тақырыптық файлын-
да сипатталған. Стандартты контейнерлерді қолдану кезінде бұл файл авто-
матты түрде іске қосылады.
Итераторлар тұрақтылық болуы мүмкін. Тұрақтылық итераторлар
контейнердің соған сəйкес элементтерінің мəндерін өзгерту қажеттілігі
болмаған кезде қолданылады.
358
Итератор
жарамды (ол қандай да бір элементке нұсқап тұрса) немесе
жарамсыз болуы мүмкін. Итератор келесі жағдайларда жарамсыз болып
қалуы мүмкін:
□
итератор инициалданған жоқ;
□
ол байланысқан контейнер өлшемдері өзгерген немесе ол жойылған;
□
итератор тізбектің соңына нұсқайды.
Тізбектің соңы оның соңғы элементінен кейін орналасқан элементке
нұсқауыш түрінде бейнеленеді. Мұндай нұсқауыш əрқашанда бар болады.
Осындай тəсілді қолдану бос тізбекті ерекше жағдай ретінде қарастырмауға
мүмкіндік береді. «Нөлдік итератор» ұғымы болмайды.
Итераторлар өздері нұсқайтын объектілермен жұмыс істеу үшін (мыса-
лы, контейнер элементінің мəнін алу үшін) қолданылатындықтан, соларға
сəйкес типтерді анықтау қажет. Ол үшін
тақырыптық файлында
Достарыңызбен бөлісу: |