Guruh talabasi karimovNuralining Ma’lumotlar tuzilmasi va algaritimlash fanidan


Download 33.38 Kb.
bet1/2
Sana23.12.2022
Hajmi33.38 Kb.
#1050046
  1   2
Bog'liq
Masharipov Sanatbek Ma\'lymotlar tuzilmasi va algaritimlash № 2



O‘ZBEKISTON RESPUBLIKASI
OLIY VA O’RTA MAXSUS TA’LIM VAZIRLIGI
MUHAMMAD AL-XORAZMIY NOMIDAGI
TOSHKENT AXBOROT TEXNOLOGIYALARI UNIVERSITETI
URGANCH FILIALI
KOMPYUTER INJINERINGI FAKULTETI
961-20 GURUH TALABASI
KarimovNuralining
Ma’lumotlar tuzilmasi va algaritimlash FANIDAN

Mustaqil ishi




Mavzu: Protsessorlarning tuzlishi va xususiatlari

Bajardi: Kompyuter injineringi fakulteti
961-20 guruh talabasi S.Masharipov


Reja:
1 Sinf shablonlar
2. Kompilyatsiya modellari
3 Shablonlar sinflari va standart kutubxona

1.Sinf shablonlar


Butun sonlarning bog'langan ro'yxatini amalga oshiradigan sinfda ro'yxatga yangi element qo'shish va kerakli elementni qidirish algoritmlari ro'yxat elementlarining butun son ekanligiga bog'liq emas. Xuddi shu algoritmlar belgilar ro'yxati, satrlar, sanalar, o'yinchilar sinflari va boshqalar uchun qo'llaniladi.


template< class T > class List
{
/* ... */ public:
void Add( const T& Element ); bool Find( const T& Element ); /* ... */ };
Sinf shablonini ishlatish uchun uning parametrlarini ko'rsatish kerak: List li;

Listls; li.Add( 17 ); ls.Add("Salom!");


Shablon parametrlari quyidagilar bo'lishi mumkin: tip parametrlari, oddiy turdagi parametrlar, shablon parametrlari.


Har qanday turdagi parametrlar uchun standart qiymatlarni belgilashingiz mumkin.


shablon< sinf T1,


// parametr turi

toifa nomi T2,


// parametr turi

int I,

// normal turdagi parametr

T1 DefaultValue,


// normal turdagi parametr

shablon< sinf > sinf T3, // shablon parametri


sinf Belgi = belgi


// standart parametr


>


Agar sinf yoki funktsiya shablonida bir xil shablonni ishlatish kerak bo'lsa, lekin har xil parametrlarga ega bo'lsa, shablon parametrlaridan foydalaniladi. Masalan:

shablon< sinf Turi, shablon< sinf > sinf Konteyner > sinf CrossReferences


{


Containermems; Container refs; /* ... */ };

CrossReferences< Sana, vektor > cr1; CrossReferences< string, set > cr2;


Funktsiya shablonlarini shablon parametrlari sifatida ishlatib bo'lmaydi.

Sinf shablonlari a'zolari


Sinf shablonining a'zolari shablonlar bo'lib, sinf shabloni bilan bir xil parametrlarga ega. Xususan, bu a'zo funktsiyalarining ta'rifi shablon sarlavhasidan boshlanishi kerakligini anglatadi:


shablon< sinf T > sinf A


{

void f( T ma'lumotlari ); bekor g (bo'sh); ommaviy:


A();

};

shablon< sinf T > void A::f( T ma'lumotlari );


shablon< class T > void A::g( void );


Shablon doirasida spetsifikatorni takrorlash shart emas. Bu shuni anglatadiki, masalan, A::A() konstruktor, ammo A::A() ham yozilishi mumkin.


Agar shablon parametri ma'lumotlar turi bo'lgan a'zoga ega bo'lgan sinf bo'lsa, u holda ushbu elementdan foydalanish uchun typename kalit so'zidan foydalanish kerak. Masalan:


sinf konteyneri


{


ommaviy:

int massivi[ 15 ]; typedef int* iterator; /* ... */


iterator begin() { massivni qaytarish; } };


andoza< class C > void f( C& vektor )


{


C::iterator i = vektor.begin(); // xato turi nomi C::iterator i = vector.begin();

}


Shablon a'zolari bilan ham muammolar mavjud. Agar o'z navbatida shablon parametri bo'lgan sinf a'zosi bo'lgan shablon ushbu shablonda ishlatilsa va parametrlarni chiqarishga ruxsat bermasa, shablon kvalifikatoridan foydalanish kerak:

sinf A

{

/* ... */ ommaviy:


andoza< class T > T& ConvertTo();


shablon< class T > void ConvertFrom( const T& data ); };


shablon< sinf T > void f( T konteyneri )


{


int i1 = Container.template ConvertTo() + 1; Container.ConvertFrom( i1 ); // kvalifikatsiya shart emas

}
2.C++ dasturi tarjima birliklari (tarjima birliklari) yig'indisidir, ularning har biri kompilyator tomonidan boshqalardan mustaqil ravishda saqlanishi va qayta ishlanishi mumkin. Tarjima birliklarining kodli tasvirlari, mohiyatiga ko'ra, keyinchalik birlashtiriladigan bo'shliqlardir. Butun dasturning bajariladigan tasvirini shakllantirish an'anaviy ravishda bog'lovchi deb ataladigan, kompilyatorga bog'liq bo'lmagan alohida protsessor tomonidan amalga oshiriladi.


Tabiiyki, alohida kompilyatsiya deb ataladigan bu yondashuv o'z-o'zidan e'tiroz bildirishi mumkin emas. Muvaffaqiyatli va asosli bo'linish (loyiha, keyinroq matn) dasturning alohida tarkibiy qismlarga bo'linishi uning ishonchliligini oshirish va jamoaviy rivojlanishni tashkil etish imkonini beradi. Bundan tashqari, alohida kompilyatsiya qayta foydalanish mumkin bo'lgan komponentlarni yaratishga imkon beradi.


Bitta ta'rif qoidasiga ko'ra, ko'rsatilgan ob'ektlar dasturda ko'pi bilan bir marta paydo bo'lishi mumkin. Biroq, ushbu qoidaning bajarilishini nazorat qilish uchun kompilyator dasturni tashkil etuvchi barcha tarjima birliklarini tahlil qilishi kerak edi, bu esa ushbu printsipni C tilidan olingan shaklda alohida kompilyatsiya qilish printsipiga zid keladi. Shu sababli, standartni ishlab chiquvchilar bitta tavsif qoidasiga, agar u buzilgan bo'lsa, "diagnostika kerak emas" degan band bilan birga borishga majbur bo'lishdi. Bunday taxmin, mohiyatiga ko'ra, bitta tavsif qoidasini bekor qiladi, chunki amalda bu bir xil nomdagi ob'ektlarni bir nechta tarjima birliklarida ko'rsatish mumkinligini anglatadi; bunday xato tashxis qo'yilmaydi va butun dastur doirasida bunday ob'ektlardan foydalanishning ta'siri til va uning kompilyatori tomonidan hech qanday tarzda aniqlanmaydi va butunlay "razvedka" va bog'lovchini amalga oshirish xususiyatlariga bog'liq.


Ushbu kamchilikni qisman qoplash sifatida modullararo o'zaro ta'sirni tashkil qilish uchun amalda sarlavha fayllari qo'llaniladi. Har bir tarjima birligi uchun maxsus matn ("interfeys") yaratiladi, unda ushbu tarjima birligining tashqi bog'lanishiga ega bo'lgan shaxslar deklaratsiyasi joylashtiriladi. Bunday matn oldindan ishlov berish mexanizmi orqali ushbu ob'ektlardan foydalangan holda boshqa tarjima birliklariga kiritiladi. Ushbu yondashuvni to'liq yechim deb hisoblash mumkin emas; Bu modullikning o'rnini bosuvchi vositadir.


Keling, ushbu holatni oddiy misol bilan ko'rib chiqaylik. Funktsiyaning tavsifi bo'lsin:


bekor f (char* t ) {...}


va bu funksiya tasvirlangan tarjima birligidan tashqarida mavjud bo'lishi kerak bo'lsin; bu imkoniyat boshqaruv komponentlari o'rtasidagi bog'lanishni ta'minlaydi va real dasturlashda xosdir.


Muntazam funktsiyalar uchun standart yechim quyidagicha. Funktsiya tavsifi bitta tarjima birligida joylashgan va uning e'lonlari #include direktivasi yordamida ushbu funktsiyadan foydalanadigan barcha tarjima birliklariga kiritilgan sarlavha faylida joylashgan.


Endi funksiya shabloni uchun xuddi shunday vaziyatni ko'rib chiqing: template


bekor f (T t) {. . . }


Agar bunday shablondan foydalanish bir nechta tarjima birliklarida bo'lishi kerak bo'lsa, u holda funktsiyalar uchun tavsiflangan texnika kerakli natijani bermaydi.


Ushbu muammoning to'g'ridan-to'g'ri echimi juda aniq: shablonning to'liq tavsifini sarlavha fayliga qo'ying va uni ushbu shablondan foydalanadiganlarning barchasida ushbu shaklga qo'shing.


kompilyatsiya birliklari. Aynan shu yondashuv (keling, uni "inklyuziv" deb ataymiz) amalda keng qo'llaniladi va sarlavhali fayllarning "shishishi" ning salbiy tendentsiyasini shakllantiradi: ba'zi hisob-kitoblarga ko'ra, shablon mexanizmidan faol foydalanish quyidagi faktlarga olib keladi: Dastur matnining 40 foizi sarlavhalarda jamlangan.

C++ tilini standartlashtirish jarayonida shablon mexanizmini alohida kompilyatsiya prinsipiga “qo‘shish” muammosi uzoq va qizg‘in muhokamalarga sabab bo‘ldi.


Birinchidan, "inklyuziv" tamoyili maqbul deb tan olindi; Shu maqsadda yagona tavsif qoidasi mos ravishda o'zgartirildi (sinflarga qo'shimcha ravishda


va sanab o'tilgan turlar, bir xil "shablon" deklaratsiyasi endi turli kompilyatsiya birliklariga kiritilishi mumkin). Shunday qilib, dastur matnining katta qismini sarlavha fayllariga o'tkazishning keng tarqalgan amaliyoti aslida qonuniylashtirildi.


Ikkinchidan, shablon deklaratsiyasi va deklaratsiyalarini alohida kompilyatsiya qilishni qo'llab-quvvatlash uchun shablon mexanizmiga yaxshilanishlar kiritildi (bu imkoniyat, "inklyuziv" dan farqli o'laroq, ba'zan "alohida" yondashuv deb ataladi). Asosiy g'oya eksport kalit so'zini joriy qilishdir, undan shablon deklaratsiyasini u paydo bo'lgan tarjima birligidan tashqarida mavjud qilish uchun foydalanish mumkin.


Umuman olganda, “eksport” mexanizmi quyidagicha. Standartda aytilishicha, agar shablon deklaratsiyasidan oldin eksport kalit so'zi bo'lsa, bu deklaratsiya sodir bo'lgan tarjima birligini qayta ishlash uchun etarli. Masalan, quyidagi parchada


eksport shabloni void f ( T );

. . .

f(1);

. . .

f('a');

. . .

shablon deklaratsiyasidan oldin eksport so'zining mavjudligi ushbu birlikni tarjima qilish, shu jumladan ushbu andoza sozlamalarini qayta ishlash imkonini beradi. Bunday sozlamalar f shablonining (to'liq) tavsifini talab qilganligi sababli, kompilyator uni qandaydir tarzda olishi kerak. Maxsus qidiruv usullari standartda belgilanmagan. Natijada, standart manba kodini tashkil etishning ikkala shaklini qo'llab-quvvatlaydi - "alohida" va "inklyuziv".

Shablon ixtisosligi


Masalan, eng oddiy shablon sinfi 'A' quyidagicha aniqlanishi mumkin:


Bir muncha vaqt o'tgach, biz sinfimiz barcha turlar uchun bir xil ishlashini xohlaymiz, lekin int kabi qiyin sinf uchun boshqacha. Bema'ni savol, biz ixtisoslikni yozamiz: u deklaratsiya bilan bir xil ko'rinadi, lekin biz burchakli qavslar ichida shablon parametrlarini ko'rsatmaymiz, o'rniga uning nomidan keyin maxsus shablon argumentlarini ko'rsatamiz:


shablon<> sinf A {}; // bu yerda int shablon argumentidir


Bajarildi, siz int uchun maxsus amalga oshirish usullari va maydonlarini yozishingiz mumkin. Bunday ixtisoslashuv odatda to'liq (to'liq ixtisoslik yoki aniq ixtisoslik) deb ataladi.


Agar siz ISO C++ standartini diqqat bilan o'qib chiqsangiz, qiziqarli bayonotni topishingiz mumkin: maxsus shablon sinfini yaratish orqali biz yangi shablonni yaratamiz.


Sinf. Ixtisoslashgan shablonlar sinfi biz ixtisoslashgan shablon sinfida maydonlari yoki tur deklaratsiyasi mavjud bo'lmagan usullarni o'z ichiga olishi mumkin. Faqat ma'lum bir mutaxassislik uchun ishlash uchun shablon sinfi usuli kerak bo'lganda qulay

- faqat ushbu mutaxassislik bo'yicha usulni e'lon qilish kifoya, qolganini kompilyator bajaradi:


Ixtisoslashtirilgan shablon sinfining butunlay, mutlaqo yangi va alohida sinf ekanligi, albatta, qiziq, ammo bunda sehrli kam narsa bor. Va kichik oqibatda sehr bor - agar bu alohida shablon sinfi bo'lsa, unda u biron-bir tarzda ixtisoslashgan bo'lmagan shablon sinfiga bog'liq bo'lmagan alohida parametrlarga ega bo'lishi mumkin (parametrlar shablondan keyin burchakli qavslar ichida).


Ya'ni, shablon sinfini ixtisoslashtirish orqali biz uni yangi parametrlar orqali ixtisoslashtirishimiz mumkin:


shablon< tip nomi S, tip nomi U > sinf A< std::map< S, U > > {};


Olingan shablon sinfini std::map bilan ishlatganda, ixtisoslashuv qo'llaniladi, bu erda kalit turi std::map yangi S shablonining parametri sifatida va std::map qiymati U sifatida mavjud bo'ladi.


Shablonning bunday ixtisoslashuvi, unda yangi parametrlar ro'yxati ko'rsatilgan va ushbu parametrlar orqali ixtisoslashuv uchun argumentlar ko'rsatilgan, qisman ixtisoslashuv deyiladi.


3. Ba'zan dasturlarni yozishda siz parametrlarga bog'liq bo'lgan sinflarni - boshqa sinflarni yaratishingiz kerak. Masalan,
agar biz stek sinfini yaratadigan bo'lsak, bu sinf uchun parametr - stek elementining turi bo'lishi juda mantiqiy. Shunday qilib
parametrli bitta sinfni yozish orqali biz bir vaqtning o'zida bir nechta konkret stek sinflarini olishimiz mumkin (reallar steklari, butun sonlar, foydalanuvchi tomonidan aniqlangan turlar va boshqalar). Si tili bu maqsadda makro ta'riflardan foydalangan.
parametrlari bilan. Ushbu yondashuvning kamchiliklari shundaki, preprotsessor o'z makrosini chaqirish o'rniga o'rnini bosadi.
matn, hech narsani tekshirmaydi, bu ko'plab xatolarning manbai. Bu xatolarni topish oson emas, chunki
dasturchi faqat makroga qo'ng'iroqni ko'radi, u kengaytirilgandan keyin olingan matnni emas.
Parametrli sinflarni yaratish uchun C++ da xatolarni aniqlash nuqtai nazaridan xavfsizroq muqobil mavjud
- shablon sinflari deb ataladi. Shablon sinfi sintaksisi quyidagicha:
andoza
sinf sinfi_nomi mumkin_meros
{
class_body
};
Shablon parametrlarining uch turi mavjud:
1) int nomi butun sondir.
2) sinf nomi - tur (nafaqat sinf, balki o'rnatilgan turlarga ham ruxsat beriladi)
3) template
sinf nomi boshqa shablondir.
Shablon parametrlari ham oddiy funksiyalar kabi standart qiymatlarga ega bo'lishi mumkin.
Masalan, stek shablonlari sinfi quyidagicha yaratilishi mumkin:
shablon
Stack sinfi
{
Tma'lumotlar [lar];
int c;
ommaviy:
Stack() { c = 0; }
void push(T x) { if(cTpop()
{ if(!empty()) ma'lumotlarni qaytaradi[--c]; Aks holda T(); }
bool empty() { qaytish c==0; }
};
Endi qandaydir stek yaratish uchun siz shunday yozishingiz kerak:
StackS;
Bunda biz butun sonlar stekini yaratamiz, ularning maksimal soni stekda 200 ta. Xuddi shunday.
haqiqiy sonlar to'plamini, butun sonlarga ko'rsatgichlarni, har qanday struktura tipidagi ob'ektlarni va boshqalarni yaratishingiz mumkin.
Vazifalar.
1. Parametri ishlatiladigan reallar turi bo‘lgan kompleks sonlarning shablon sinfini yozing.
raqamlar (agar kompleks bizning shablon sinfimiz bo'lsa, unda kompleks - bu murakkab sonlar sinfi, haqiqiy va
xayoliy qismlari float o'zgaruvchilarda saqlanadi).
2. Parametri foydalaniladigan butun sonlar turi (agar kasr bo'lsa) bo'lgan kasrlarning shablon sinfini yozing.
shablon sinfimiz, u holda fraction - bu hisob va maxraji saqlanadigan kasrlar sinfidir.
short int tipidagi o'zgaruvchilar).
C++ tilining standart kutubxonasida stek (stek fayli), navbatlar uchun tayyor shablon sinflari mavjud.
(navbat fayli), shuningdek quyidagi ma'lumotlar tuzilmalari uchun:
1) vektor (fayl vektori) - massiv, tipga asoslangan elementlar ketma-ketligini saqlash uchun ma'lumotlar strukturasi
element shablon parametridir. Bunday holda, vektorning elementlari soni dasturning ishlashi davomida o'zgarishi mumkin.
Quyidagi kabi haqiqiy elementlar bilan vektor o'zgaruvchisini yaratishingiz mumkin:
vektor v;
Vektor elementlariga kirish odatdagidek massivlar uchun indekslash operatsiyasi orqali amalga oshiriladi, lekin bir vaqtning o'zida
push_back(new_element) usuli yordamida vektor oxiriga yangi element qo'shishga ruxsat beriladi. Qabul qilish
vektor elementlarining joriy soni o'lcham usuli yordamida amalga oshirilishi mumkin, elementni o'chirish usuli yordamida vektordan olib tashlash mumkin
(uning parametri olib tashlanadigan elementga ishora qiluvchi iterator).
2) bog'langan (aniqrog'i, ikki marta bog'langan) ro'yxat - shablon sinfi ro'yxati (ro'yxat fayli). Uning elementlariga o'ting
biroz murakkabroq (iteratorlar uchun pastga qarang). Uning elementlari sonini vektor kabi o'lcham usuli yordamida olishingiz mumkin.
Insert usuli yordamida elementni ma'lum joyga qo'shishingiz mumkin (uning parametrlari elementga ishora qiluvchi iterator,
undan oldin kiritish sodir bo'ladi, shuningdek qo'shilayotgan elementning qiymati). Roʻyxatdagi elementni oʻchirish usuli yordamida olib tashlashingiz mumkin, bu parametr sifatida olib tashlanadigan elementga ishora qiluvchi iteratorni oladi. Oxirgi usul qaytadi
olib tashlanadigan keyingi elementga ishora qiluvchi boshqa iterator.
1. Standart kutubxonadan shablon sinfi stekidan foydalanib, ifodani baholovchi dastur yozing,
teskari polyak yozuvida yozilgan (bu belgida operatsiya belgisi operandlar va qo'shni raqamlardan keyin yoziladi.
bo'shliqlar bilan ajratilgan va qavslar kerak emas). Masalan, teskari polyak yozuvidagi 10(2 + 5) ifodasi bo'ladi
10 2 5 + * ga o'xshaydi.
2*. Standart kutubxonadagi stek shablonlari sinfidan foydalanib, ifodani o'qiydigan dastur yozing
odatiy (ular aytganidek, infix) yozuvda va bir xil ifodani chiqaradi, lekin teskari yoziladi
Polsha yozuvi.
Shablon sinflari, shuningdek, umumiy amalga oshirishdan farq qiladigan shablonlarning ba'zi maxsus holatlariga ega bo'lish imkonini beradi. Masalan, standart kutubxonada shablon sinfi vektorining maxsus namunasi, ya'ni vektor mavjud.
Vektor shablonini amalga oshirish umumiy holatdan farq qiladi va bool qiymatlari qatorini emas, balki bir oz vektorni beradi,
ya'ni vektor, uning har bir elementi bir bitni egallaydi.
Ushbu turdagi maxsus ishlarni amalga oshirish quyidagicha ko'rinadi:
shablon<>
sinf nomi

{
tanasi


};
Maxsus holatlarni ta'kidlash uchun yanada murakkab konstruktsiyalar ko'rib chiqilishi mumkin; masalan, agar X ikkita shablon parametrli sinf shablonlari bo'lsa, bu holatni alohida maxsus holatga ajratish mumkin.
Parametrlar mos keladi:
shablon
sinf X
{
tanasi
};
Shablon parametrlari to'plamiga ega bo'lish, konstruktsiyadan foydalanish
shablon sinf nomi
;
siz kompilyatorni shablon sinfining tegishli namunasini yaratishga majbur qilishingiz mumkin. Biroq, agar kerak bo'lsa
bir nechta fayllarda bajarilganda, kompilyatsiya vaqtini sezilarli darajada oshirish mumkin. Bu sodir bo'lishining oldini olish uchun, umuman
fayllar, bittasidan tashqari, ushbu konstruktsiyani almashtirishingiz kerak
extern shablon sinfi nomi
;
Xuddi shu narsa shablon funksiyalari uchun ham amal qiladi, faqat sinf nomi
turi nomi(funksiya_parametrlarining_turlari) bilan almashtiriladi — funksiya sarlavhasi shablon parametrlari qiymatlarining aniq ko‘rsatilishi bilan.
Shablon funksiyalarini muhokama qilayotganda ko'rganimizdek, ular bir nechta funksiyalar matnlari bir-biridan faqat ishlatiladigan o'zgaruvchilarning turlari bo'yicha farq qilganda, lekin aks holda bir xil bo'lganda foydali bo'ladi. Uchun
elementlar ketma-ketligi bilan ishlashda bunday bir xillik uchun iterator tushunchasi ixtiro qilingan.
Iterator - bu ko'rsatkichga juda o'xshash ob'ekt. Ko'rsatkich kabi, u birini tanlash uchun xizmat qiladi
qandaydir ketma-ketlik elementlaridan. U bilan bajarilishi mumkin bo'lgan operatsiyalar juda o'xshash ko'rinadi
ko'rsatkich arifmetikasiga, lekin amalga oshirish juda boshqacha bo'lishi mumkin. Iterator ketma-ketlik uchun ishlatiladi
ba'zi ketma-ketlik elementlarini sanab o'tish.
Imkoniyatlariga ko'ra iteratorlar bir necha sinflarga bo'linadi:
1) Kirish iteratorlari. Bu iteratorning eng oddiy turi. Bunday iteratorlar sizga faqat uchtasini bajarishga imkon beradi
harakatlar: havolani bekor qilish (agar ketma-ketlik elementi strukturaviy turdagi bo'lsa, * va -> dan foydalanish), siljitish
bir pozitsiya oldinga, va ikki qo'shni smenalar o'rtasida, bekor qilish operatsiyasining bir martadan ortiq chaqiruviga yo'l qo'yilmaydi va tenglik uchun taqqoslash. Bunday iteratorlar eng umumiy shakldagi ketma-ketliklarni tavsiflaydi. Masalan,
bunday iteratorlardan foydalanib, siz hatto klaviaturadan elementlarni kiritish jarayonini tasvirlashingiz mumkin, nima uchun aslida bunday
iteratorlar va kiritish iteratorlari deyiladi.
Kirish iteratorlari singari, chiqish iteratorlari ham mavjud (hammasi bir xil, bundan mustasno, bekor qilish operatsiyasi o'rniga faqat ko'rsatilgan elementni kiritishga ruxsat beriladi, ya'ni *i=... ko'rinishidagi ifoda, bu erda i iterator).
2) Bir yo‘nalishli iteratorlar ham kirish, ham chiqish iteratorlarining xususiyatlarini birlashtiradi; Bundan tashqari
Bundan tashqari, ikki smena o'rtasida siz iterator tomonidan ko'rsatilgan elementni xohlagancha ko'p marta o'qishingiz va yozishingiz mumkin. Bunday iteratorlar odatda bitta bog'langan ro'yxat elementlarini takrorlash uchun ishlatiladi.
3) Ikki yo‘nalishli iteratorlar bir yo‘nalishli iteratorlar qila oladigan hamma narsani qilishlari mumkin, lekin ular ham orqaga qaytishlari mumkin.
bir pozitsiya (kamaytirish operatsiyasi -−). Ikki marta bog'langan ro'yxat elementlarini takrorlash uchun javob beradi.
4) Nihoyat, eng aqlli iteratorlar tasodifiy kirish iteratorlari bo'lib, ular ko'rsatkich arifmetikasining barcha imkoniyatlarini amalga oshiradilar. Massivga asoslangan ma'lumotlar tuzilmalari elementlarini va ko'p hollarda takrorlash uchun javob beradi
ichki tuzilish nuqtai nazaridan ular oddiy ko'rsatkichlardir.
Iteratordan foydalanishga misol butun sonlar ro'yxatini chop etish uchun quyidagi funksiya tomonidan berilgan:



Download 33.38 Kb.

Do'stlaringiz bilan baham:
  1   2




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