358
Итератор
жарамды (ол қандай да бір элементке нұсқап тұрса) немесе
жарамсыз болуы мүмкін. Итератор келесі жағдайларда жарамсыз болып
қалуы мүмкін:
□
итератор инициалданған жоқ;
□
ол байланысқан контейнер өлшемдері өзгерген немесе ол жойылған;
□
итератор тізбектің соңына нұсқайды.
Тізбектің соңы оның соңғы элементінен кейін орналасқан элементке
нұсқауыш түрінде бейнеленеді. Мұндай нұсқауыш əрқашанда бар болады.
Осындай тəсілді қолдану бос тізбекті ерекше жағдай ретінде қарастырмауға
мүмкіндік береді. «Нөлдік итератор» ұғымы болмайды.
Итераторлар өздері нұсқайтын объектілермен жұмыс істеу үшін (мыса-
лы, контейнер элементінің мəнін алу үшін) қолданылатындықтан, соларға
сəйкес типтерді анықтау қажет. Ол үшін
тақырыптық файлында
iterator_traits
шаблоны (
trait
ағылшын тілінен аударғанда — ортақ си-
паты) анықталған.
template struct iterator_traits{
typedef typename Iter::difference_type difference_type;
typedef typename Iter::value_type value_type;
typedef typename Iter::pointer pointer;
typedef typename Iter::reference reference;
typedef typename Iter::iterator_category
iterator_category;
};
Мысалдағы
typename
түйінді сөзі компилятор
Iter
сөзін типтің
атауы ретінде тануы үшін қажет.
iterator_category
– бұл итератордың
типі, ол итератордың қандай операцияларды қолдайтынын анықтайды.
difference_type
типі екі итератордың арасындағы айырманы өрнектеу
қызметін атқарады.
Тақырыптық файлда келесідей итераторлар типтері сипатталған:
Достарыңызбен бөлісу: