10-ma’ruza. Konteynerli tiplar va ularning qo’llanilishi. Konteyner sinflar va
iteratorlar
Haqiqiy hayotda biz doimo konteynerlardan foydalanamiz. Muqovali va bog'langan kitob
sahifalari, tungi stol / ryukzakdagi narsalar va boshqalar. Ushbu idishlarsiz ichidagi narsalar bilan
ishlash juda noqulay bo'lar edi.
Tasavvur qiling-a, muqovasi yoki qopqog'i bo'lmagan
kitobni
o'qish yoki oziq-ovqat idishi / piyola / plastinka va hokazolardan foydalanmasdan grechkani qo’l
bilan yeyishga harakat qiling. Tartibsizlik! Konteynerlarning ahamiyati shundaki, ular obyektlarni
to'g'ri tartibga solish va saqlashga yordam beradi.
Konteyner sinflari. C++da konteyner sinfi maʼlum bir maʼlumot turidagi (foydalanuvchi
tomonidan belgilangan yoki fundamental) bir nechta obyektlarni saqlash va tartibga solish uchun
sinfdir. Ko'p turli xil konteyner sinflari mavjud, ularning har biri o'zining afzalliklari, kamchiliklari
yoki foydalanish cheklovlariga ega. Hozirgacha dasturlashda eng ko'p qo'llaniladigan konteyner
bu massiv bo'lib, biz allaqachon ko'plab misollarda foydalanganmiz. Garchi C++ standart oddiy
massivlarga ega bo'lsa-da, ko'pchilik dasturchilar
array yoki
vector kabi konteyner massivlaridan
foydalanadilar, chunki ular taqdim etadigan imtiyozlar juda ko’pdir. Standart massivlardan farqli
o'laroq, konteyner massivi sinflari elementlar qo'shilgan yoki olib tashlanganida o'z
hajmini
dinamik ravishda o'zgartirish imkoniyatiga ega. Bu ularni oddiy massivlarga qaraganda qulayroq
qilibgina qolmay, balki xavfsizroq qiladi.
Odatda, C ++ konteyner sinflarining funksionalligi quyidagicha:
- Bo'sh konteynerni yaratish (konstruktor orqali).
- Konteynerga yangi obyekt qo'shish.
- Obyektni konteynerdan olib tashlash.
- Hozirgi vaqtda konteynerdagi obyektlar sonini ko'ring.
- Konteynerni barcha obyektlardan tozalash.
- Saqlangan obyektlarga kirish.
- Obyektlarni/elementlarni saralash (har doim ham emas).
Ba'zan konteyner sinflarining funksionalligi yuqorida ko'rsatilgandek keng bo'lmasligi
mumkin. Masalan, konteyner massivlari sinflari ko'pincha ob'ektlarni qo'shish / o'chirish
funksiyasiga
ega emas, chunki ular allaqachon sekin va ishlab
chiquvchi shunchaki yukni
oshirishni xohlamaydi.
Konteyner sinflaridagi munosabatlar turi "bir narsaning a'zosi" dir. Masalan,
massivning
elementlari massivning “a’zolari”dir (uga tegishli). E'tibor bering, biz bu yerda "biror narsaning
a'zosi" atamasini C++ sinfining a'zosi ma'nosida ishlatmaymiz.