Задача этой книги дать краткое и четкое изложение языка С++ в соответствии со стандар том iso/iec 14882. Она предназначена для студентов, изучающих язык «с нуля»



Download 2 Mb.
bet187/232
Sana29.03.2022
Hajmi2 Mb.
#516205
TuriЗадача
1   ...   183   184   185   186   187   188   189   190   ...   232
Bog'liq
Т. А. Павловская C C . Программирование на языке высокого уровня

Таблица 13.1. Категории итераторов



Категория итератора

Операции

Контейнеры

âõîäíîé (input)

x= *i

âñå

âûõîäíîé (Output)

*i=x

âñå

ïðяìîé (fOrward)

x= *i, *i=x

âñå

äâóíaïðaâëåííûé (bidireCtiOnal)

x= *i, *i= x,
--i, i--

âñå

ïðîèçâîëüíîãî äîñòóïa

x= *i, *i= x,

âñå, êðîìå list

(randOm aCCess)

--i, i--







i+ n, i– n, i += n, i -=n







i< j, i> j, i <= j, i >=j




Êaê âèäíî èç òaáëèöû, ïðяìîñ èòåðaòîð ïîääåðæèâaåò âñå îïåðaöèè âõîäíûõ è âûõîäíûõ èòåðaòîðîâ è ìîæåò èñïîëüçîâaòüñя âåçäå, ãäå òðåáóþòñя âõîäíûå èëè âûõîäíûå èòåðaòîðû. Äâóíaïðaâëåííûñ èòåðaòîð ïîääåðæèâaåò âñå îïåðaöèè ïðяìîãî, a òaêæå äåêðåìåíò, è ìîæåò èñïîëüçîâaòüñя âåçäå, ãäå òðåáóåòñя ïðяìîé èòåðaòîð. Èòåðaòîð ïðîèçâîëüíîãî äîñòóïa ïîääåðæèâaåò âñå îïåðaöèè äâóía- ïðaâëåííîãî, a êðîìå òîãî, ïåðåõîä ê ïðîèçâîëüíîìó ýëåìåíòó ïîñëåäîâaòåëüíî- ñòè è ñðaâíåíèå èòåðaòîðîâ.
Ìîæíî ñêaçaòü, ÷òî èòåðaòîðû îáðaçóþò èåðaðõèþ, ía âåðõíåì óðîâíå êîòîðîé íaõîäяòñя èòåðaòîðû ïðîèçâîëüíîãî äîñòóïa. ×åì âûøå óðîâåíü èòåðaòîða, òåì áîëåå âûñîêèå ôóíêöèîíaëüíûå òðåáîâaíèя ïðåäúяâëяþòñя ê êîíòåéíåðó, äëя êîòîðîãî èñïîëüçóåòñя èòåðaòîð. Íaïðèìåð, äëя ñïèñêîâ èòåðaòîðaìè ïðîèç- âîëüíîãî äîñòóïa ïîëüçîâaòüñя íåëüçя, ïîñêîëüêó ñïèñîê íå ïîääåðæèâaåò òðå- áóåìûé íaáîð îïåðaöèé èòåðaòîða.
Èòåðaòîðíûå êëaññû è ôóíêöèè îïèñaíû â çaãîëîâî÷íîì ôaéëå . Ïðè èñïîëüçîâaíèè ñòaíäaðòíûõ êîíòåéíåðîâ ýòîò ôaéë ïîäêëþ÷aåòñя aâòîìaòè÷å- ñêè.
Èòåðaòîðû ìîãóò áûòü êîíñòaíòíûìè. Êîíñòaíòíûå èòåðaòîðû èñïîëüçóþòñя òî- ãäa, êîãäa èçìåíяòü çía÷åíèя ñîîòâåòñòâóþùèõ ýëåìåíòîâ êîíòåéíåða íåò íåîá- õîäèìîñòè.

Èòåðaòîð ìîæåò áûòü äåññòâèòåëüíûì (êîãäa îí óêaçûâaåò ía êaêîé-ëèáî ýëå- ìåíò) èëè íåäåññòâèòåëüíûì. Èòåðaòîð ìîæåò ñòaòü íåäåéñòâèòåëüíûì â ñëå- äóþùèõ ñëó÷aяõ:



  • èòåðaòîð íå áûë èíèöèaëèçèðîâaí;

  • êîíòåéíåð, ñ êîòîðûì îí ñâяçaí, èçìåíèë ðaçìåðû èëè óíè÷òîæåí;

  • èòåðaòîð óêaçûâaåò ía êîíåö ïîñëåäîâaòåëüíîñòè.

Êîíåö ïîñëåäîâaòåëüíîñòè ïðåäñòaâëяåòñя êaê óêaçaòåëü ía ýëåìåíò, ñëåäóþùèé ça ïîñëåäíèì ýëåìåíòîì ïîñëåäîâaòåëüíîñòè. Ýòîò óêaçaòåëü âñåãäa ñóùåñòâóåò. Òaêîé ïîäõîä ïîçâîëяåò íå ðaññìaòðèâaòü ïóñòóþ ïîñëåäîâaòåëüíîñòü êaê îñî- áûé ñëó÷aé. Ïîíяòèя «íóëåâîé èòåðaòîð» íå ñóùåñòâóåò.
Ïîñêîëüêó èòåðaòîðû èñïîëüçóþòñя äëя ðaáîòû ñ îáúåêòaìè, ía êîòîðûå îíè óêaçûâaþò (íaïðèìåð, äëя ïîëó÷åíèя çía÷åíèя ýëåìåíòa êîíòåéíåða), òðåáóåòñя îïðåäåëèòü ñîîòâåòñòâóþùèå òèïû. Äëя ýòîãî â çaãîëîâî÷íîì ôaéëå îïðåäåëåí øaáëîí iteratOr_traits (trait â ïåðåâîäå ñ aíãëèéñêîãî — õaðaêòåðíaя
÷åðòa).
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 íåîáõîäèìî äëя òîãî, ÷òîáû êîìïèëяòîð ìîã îïîçíaòü Iter êaê èìя òèïa. iteratOr_CategOry — ýòî òèï èòåðaòîða, êîòîðûé îïðåäåëяåò, êa- êèå îí ïîääåðæèâaåò îïåðaöèè. Òèï differenCe_type ñëóæèò äëя âûðaæåíèя ðaç- íîñòè ìåæäó äâóìя èòåðaòîðaìè.
 çaãîëîâî÷íîì ôaéëå îïèñaíû ñëåäóþùèå òèïû èòåðaòîðîâ:
struCt input_iteratOr_tag{}; struCt Output_iteratOr_tag{};
struCt fOrward_iteratOr_tag: publiC input_iteratOr_tag{}; struCt bidireCtiOnal_iteratOr_tag:
publiC fOrward_iteratOr_tag{}; struCt randOm_aCCess_iteratOr_tag:
publiC bidireCtiOnal_iteratOr_tag{};
Òèï èòåðaòîða ìîæíî óêaçaòü â ñïèñêå ïaðaìåòðîâ øaáëîía ôóíêöèè, èñïîëü- çóþùåé èòåðaòîð, äëя òîãî ÷òîáû ía ýòaïå êîìïèëяöèè ìîæíî áûëî âûáðaòü òèï èòåðaòîða, îáåñïå÷èâaþùèé íaèáîëåå ýôôåêòèâíóþ ðåaëèçaöèþ, ïîñêîëüêó îäèí è òîò æå aëãîðèòì äëя ðaçëè÷íûõ âèäîâ èòåðaòîðîâ ìîæåò áûòü ðåaëèçîâaí ñ ðaçíîé ýôôåêòèâíîñòüþ.
Äëя îáû÷íûõ óêaçaòåëåé â öåëяõ ïîâûøåíèя ýôôåêòèâíîñòè îïðåäåëåíû ñïå- öèaëèçaöèè øaáëîía iteratOr_traits (î ñïåöèaëèçaöèяõ øaáëîíîâ ðaññêaçûâa- ëîñü ía ñ. 220):
template struCt iteratOr_traits{ typedef ptrdiff_t differenCe_type;

typedef T value_type; typedef T* pOinter; typedef T& referenCe;


typedef randOm_aCCess_iteratOr_tag iteratOr_CategOry;
};
Ðaçíîñòü ìåæäó äâóìя óêaçaòåëяìè èìååò ñòaíäaðòíûé òèï ptrdiff_t, îïðåäå- ëåííûé â . Àíaëîãè÷íaя ñïåöèaëèçaöèя øaáëîía ââåäåía è äëя òèïa COnst T*.
Ïîñêîëüêó òîëüêî èòåðaòîðû ïðîèçâîëüíîãî äîñòóïa ïîääåðæèâaþò îïåðaöèè + è –, â áèáëèîòåêå îïèñaíû ôóíêöèè distanCe è advanCe. Ôóíêöèя distanCe ñëóæèò äëя îïðåäåëåíèя ðaññòîяíèя ìåæäó ýëåìåíòaìè êîíòåéíåða:
distanCe(InputIteratOr first, InputIteratOr last);
Îía âîçâðaùaåò çía÷åíèå òèïa differenCe_type, ïðåäñòaâëяþùåå ñîáîé ðaçíîñòü ìåæäó äâóìя èòåðaòîðaìè. Ýòa ôóíêöèя äëя âñåõ èòåðaòîðîâ, êðîìå èòåðaòîðîâ ïðîèçâîëüíîãî äîñòóïa, âûïîëíяåòñя ñ èñïîëüçîâaíèåì îïåðaöèè ++ ça âðåìя, ïðîïîðöèîíaëüíîå ðaññòîяíèþ ìåæäó ýëåìåíòaìè êîíòåéíåða, òî åñòü äîâîëüíî ðåñóðñîåìêa. Àíaëîãè÷íî ðaáîòaåò è ôóíêöèя advanCe, êîòîðaя ïðèìåíяåòñя äëя ðåaëèçaöèè îïåðaöèè i += n:
vOid advanCe(InputIteratOr& i, DistanCe n);
Âåëè÷èía n ìîæåò áûòü îòðèöaòåëüíîé òîëüêî äëя äâóíaïðaâëåííûõ èòåðaòîðîâ è èòåðaòîðîâ ïðîèçâîëüíîãî äîñòóïa.



Download 2 Mb.

Do'stlaringiz bilan baham:
1   ...   183   184   185   186   187   188   189   190   ...   232




Ma'lumotlar bazasi mualliflik huquqi bilan himoyalangan ©hozir.org 2024
ma'muriyatiga murojaat qiling

kiriting | ro'yxatdan o'tish
    Bosh sahifa
юртда тантана
Боғда битган
Бугун юртда
Эшитганлар жилманглар
Эшитмадим деманглар
битган бодомлар
Yangiariq tumani
qitish marakazi
Raqamli texnologiyalar
ilishida muhokamadan
tasdiqqa tavsiya
tavsiya etilgan
iqtisodiyot kafedrasi
steiermarkischen landesregierung
asarlaringizni yuboring
o'zingizning asarlaringizni
Iltimos faqat
faqat o'zingizning
steierm rkischen
landesregierung fachabteilung
rkischen landesregierung
hamshira loyihasi
loyihasi mavsum
faolyatining oqibatlari
asosiy adabiyotlar
fakulteti ahborot
ahborot havfsizligi
havfsizligi kafedrasi
fanidan bo’yicha
fakulteti iqtisodiyot
boshqaruv fakulteti
chiqarishda boshqaruv
ishlab chiqarishda
iqtisodiyot fakultet
multiservis tarmoqlari
fanidan asosiy
Uzbek fanidan
mavzulari potok
asosidagi multiservis
'aliyyil a'ziym
billahil 'aliyyil
illaa billahil
quvvata illaa
falah' deganida
Kompyuter savodxonligi
bo’yicha mustaqil
'alal falah'
Hayya 'alal
'alas soloh
Hayya 'alas
mavsum boyicha


yuklab olish