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.