Ketma-ket konteynerlar - Tiplarni dinamik tarzda

|
Tiplarni dinamik tarzda
|
bet | 18/131 | Sana | 13.05.2024 | Hajmi | 1,83 Mb. | | #228405 |
Bog'liq Tiplarni dinamik tarzdaKetma-ket konteynerlar. Ular uzluksiz ketma-ketlikda o‘xshash miqdorlarning chekli sonini saqlashni taʻminlaydi. Konteynerlar sifatida vektor (vector), ikki tomonlama navbat (deque), ro‘yxat (list) va bir aloqali ro‘yxati (forward_list), shuningdek konteyner variantlar asosida adapterlar, stek (stack), navbat (queue) va ustuvorlik bilan navbat (priority_queue) sinflarini o‘z ichiga oladi. Massiv ham amallar bilan cheklangan holda konteynerning yana bir turidir.
Konteynerning har bir turi maʻlumotlar ustida o‘z amallar to‘plamini taʻminlaydi. Siz tanlagan konteyner turi dasturdagi maʻlumotlar bilan nima qilishni xohlashingizga bog‘liq. Masalan, agar ketma-ketlik o‘rtasida maʻlumotlar tez - tez joylashtirish va o‘chirish kerak bo‘lsa, ro‘yxatlardan foydalanish kerak, maʻlumotlarni oxirida yoki boshida, birinchi navbatda joylatrish kerak bo‘lsa, ikki tomonlama navbatdan foydalanish maqsadga muvofiq.
Assotsiativ konteynerlar. Assotsiativ konteynerlar asosiy maʻlumotlarga kalitlar asosida tezkor murojaat qilishni taʻminlaydi. Bu konteynerlar muvozanatli daraxtlarga asoslangan. Assotsiativ konteynerlarning besh turi mavjud: lug‘atlar (map), ko‘p lug‘atlar (multi) (multimap), to‘plamlar (set), multi to‘plamlar (multiset) va bitli to‘plam (bitset).
Dasturchi standart kutubxonada mavjud bo‘lgan sinflarga asoslanib o‘z konteyner sinflarini yaratishi mumkin. Bunga kirishishdan oldin muhim tushunchani bilishinggiz shart, yaʻni STL kutubxonasining fundamental tushunchasi bu shablondir
Barcha konteyner sinflari standartlashtirilgan interfeysi bilan taʻminlangan. Turli konteynerlar uchun bir xil amallarning maʻnosi bir xil bo‘lishi tabiiydir. Asosiy amallar konteynerlarning barcha turlari uchun qo‘llaniladi. Standart esa faqat konteyner interfeysini belgilaydi, shuning uchun turli xil dasturlar samaradorlikda katta farq qilishi mumkin. Barcha konteynerlar o‘z xotirasini o‘zi boshqaradi, shuning uchun dasturchi bu haqida o‘ylashning hojati yo‘q.
Deyarli har qanday konteynerlarning quyidagi xususiyatlari bor:
2.2-jadval. Konteyner xususiyatlari.
№
|
Xususiyat nomi
|
mazmuni
|
1
|
value_type
|
Konteyner elementining tipi
|
2
|
size_type
|
Elementlar indeksining tipi
|
3
|
iterator
|
Iterator
|
4
|
const_iterator
|
O‘zgarmas iterator
|
5
|
reverse_iterator
|
Teskari iterator
|
6
|
const_reverse_iterator
|
O‘zgarmas teskari iterator
|
7
|
reference
|
Elementga havola
|
8
|
const_reference
|
O‘zgarmas elementga havola
|
9
|
key_type
|
Kalit tipi (assotsiativ konteynerlar uchun)
|
10
|
key_compare
|
Taqqoslash mezoni (assotsiativ konteynerlar
uchun)
|
Iterator bir element uchun ko‘rsatkichga ekvivalentidir. Ular konteynerlarni to‘g‘ri yoki teskari yo‘nalishda ko‘rish uchun ishlatiladi. Iteratordan talab qilinadigan barcha amallar konteyner elementiga murojaat qilish va uning keyingi elementiga o‘tish amalini amalga oshirishdir. Konteynerlarning elementlarining qiymatlari o‘zgarmaganda o‘zgarmas iteratorlardan foydalaniladi.
Iteratorlar yordamida haqiqiy maʻlumotlar tiplari haqida o‘ylamasdan, konteyner elementlarga murojaat qilish uchun foydalanish mumkin. Buning uchun, har bir konteyner quyidagi 2.3-jadvalda keltirilgan bir necha usullardan foydalanishni tavsiya qilinadi. Har bir konteyner uchun bu tiplar va usullarni, ularni realizatsiyasini amalga oshirishga bog‘liq tarzda belgilanadi. Shuningdek, ixtiyoriy konteynerlarda ularning hajmi haqida maʻlumot olish uchun usullari mavjud:
size() – elementlar soni;
max_size() – konreynerning maksimal o‘lchami (1 miliard ta element uchun);
empty() – mantiqiy usuli, konteyner bo‘shligini tekshiradi;
Zaruriyat bo‘lganda dasturchi konteynerning maydonlari va usullari ketma- ket o‘zlashtirib boraveradi. Biz ham zaruriyat tug‘ilganda foydalanamiz.
2.3-jadval. Konteyner sinflarning umumiy usullari.
№
|
Usullar
|
Izoh
|
1
|
iterator begin()
const_iterator begin () const
|
Birinchi elementni ko‘rsatadi
|
2
|
iterator end() const_iterator end ()
const
|
Oxirgisidan keyingi elementni ko‘rsatadi
|
3
|
reverse_iterator rbegin() const_reverse_iterator
rbegin () const
|
Teskari ketma-ketlikda birinchi elementni ko‘rsatadi
|
4
|
reverse_iterator rend() const_reverse_iterator
rend () const
|
Teskari ketma-ketlikda oxirgisidan keyingi elementni ko‘rsatadi
|
|
| |