-MA’RUZA 


MAVZU: Konteynerlarning adapterlari

|
-MA’RUZA
MAVZU: Konteynerlarning adapterlari
|
bet | 32/143 | Sana | 20.07.2024 | Hajmi | 0,81 Mb. | | #268096 |
Bog'liq Tiplarni dinamik tarzda-fayllar.org4-MA’RUZA
MAVZU: Konteynerlarning adapterlari.
Reja:
Stack, queue, priority_queue, deque.
Konteynerlar bilan ishlash algoritmlari.
Funktorlarning qo‘llanilishi.
Kalit so‘zlar: . Konteyner, adapter, shablon, sinf, moslashtirish, stack,(stek), queue
(navbat), priority_queue (ustuvor bilan navbat), deque (ikki
tomonlama navbat), maʻlumotlar tuzilmasi, push_back, pop_back, pop_front, LIFO, FILO, LIFO, for_each(), find(), funksional obʻyektlar, Operator(), Standart ML va funktor, Haskell va funktor.
KIRISh
Adapterlar standarti shablon kutubxonasining alohida toifasidir (vakilidir). Adapterlar yangi tushunchalar yoki ilovalar emas, balki mavjud kutubxona tushunchalarining o‘ziga xos, tez-tez ishlatiladigan maqsadlar uchun moslashtirishlari. Bu moslashtirish (adaptatsiyalash) ko‘pincha adapterning so‘rovlarnnig asosiy tushunchasiga asoslanib, funksiyalarini cheklash orqali amalga oshiriladi. Kutubxona konteynerlarning adapterlari, iteratorlar va funksiyalarni o‘z ichiga oladi.
Konteynerlarning adapterlari. Konteynerlarning adapterlari asosida adapterlarni hosil qilishning eng oson yo‘li misol orqali tushuntirishdir. Bular stack (stek), queue (navbat), priority_queue (ustuvor bilan navbat) misol bo‘ladi. Bu misollardan tushunarli bo‘ldiki, adapterlar:
juda keng va tez-tez ishlatiladigan maʻlumotlar tuzilmalari;
har qanday realizatsiyani alohida bajarilishi kerak emas. Ularning funksiyalarini taʻminlash uchun STL standart konteyneri har qanday moslashtirishda tayanch sifatida push_back, pop_back, yoki pop_front amallardan (adapter turiga qarab) foydalanish mumkin;
adapter uchun tayanch konteynerning to‘plamidan qo‘shimcha amallar chiqarib tashlanishi kerak (vahimalar yaratmaslik uchun, masalan, indekslash amali uchun, konteyner vektor bo‘lsa, stek moslashtirish ishlatiladi);
Konteynerlarning adapterlari uchun sintaktik taʻriflar misollar orqali qarab chiqish yaxshi natija beradi, shuning uchun misollar bilan tushntirib o‘tamiz. Birinchi navbvtda konteynerlarning adapterlari uchun , kabi sinflarni dasturga qo‘shish lozim.
Stek (stack, maʻlumotlar yig‘indisi): stekda uning elementlariga faqat bir uchidan murojaat qilish mumkinligi bilan xarakterlanadi va stekning yuqori qismi deb ataladi. Bu LIFO (Last In — First Out , birinchi kirgan oxiri chiqadi) tamoyili bo‘yicha faoliyat ko‘rsatuvchi maʻlumotlar to‘plamidir.
Stack elementlari satr bo‘lgan o‘zgaruvchini eʻlon qiladi. String obʻyektlar o‘zlari STL konteynerlar ekanligiga eʻtibor bering. Shunday qilib, stekkonteynerlarning har qanday elementlarini o‘z ichiga olgan konteynerlarni olishi mumkin (bu boshqa STL konteynerlari uchun xosdir).
stack eʻlon qilishni misollarning ko‘pchiligida stekka tavsif sifatida ko‘rish mumkin. Ko‘pchilik dasturchi buni boshqa bo‘lishi bilmasligi va tassafur qilmasligi mumkin. Lekin bir xil taʻrif mavjud stack> satrlari bir steki, bunda tayanch sinf vector tanlab olingan. Masalan, vector, list va deque yoki hatto dasturchining konteyner sinfi tayanch sinflar sifatida foydalanish. Baʻzan so‘rashdi, nima uchun stack< vektor> yozish mumkin emas (birinchi stringni o‘chirgan holda)? Chunki stack konstruktorini amalga oshirishda bu yo‘l belgilangan va bu juda mumkin. Ammo, butunlay boshqa turdagi tavsif bo‘ladi: string vektorlari to‘plami stack< vektor> umuman boshqa stek bo‘ladi (konteynerlarning tarkibiy joylashtirish haqidagi eslatma).
Juda ko‘p holarda stekni vektor ko‘rinishida initsializatsiya qilinda, ammo bu faqat C++11 variantida mavjud. 4.1-dasturda emplace() funksiyasidan stekka element qo‘shish uchun foydalanilgan.
Keyingi fragmentlarda, deyarli barcha amallarni (usullarini) ko‘rish mumkin: stack:push() – stekka bitta element qo‘shish, top() – stekning eng yuqorida turgan elementiga ko‘rsatkich olish, pop() – yuqori elementini chiqarib tashlash, size() – stekning joriy hajmi, empty() – stekning bo‘shligini tekshirish, swap() – ikki stekning almashtirish, operatop= stekni qiymat qilib boshqa bir tekka berish (o‘zlashtirish).
Dasturdan ko‘rish mumkinki, stek adapteri tayanch konteynerga xos usullarni yo‘qotdi (at(), operator[] va hokazo.), lekin push(), pop() funksiyalarni qayta aniqlash orqali orttirilgan hisoblanadi.
Stekni tushinib olib, o‘xshash funksiyalarni navbatga joriy qilish qiyin masala emas. Stekdan farqli o‘laroq, navbat FIFO (First In — First Out birinchi kirgan birinchi chiqadi) tamoyili bo‘yicha faoliyat yuritadigan maʻlumotlar to‘plamidir. (Bu usulni bir uchiga oqib kirish, keyin boshqa uchidan oqib chiqadigan quvurga o‘xshatish mumkin).
|
| |