Fan nomi: Algoritmik tillar va dasturlash Mavzu Konteynerli tiplar va ularning qo’llanilishi


Download 0.7 Mb.
Sana07.05.2023
Hajmi0.7 Mb.
#1441022
Bog'liq
vazifa

Fan nomi:Algoritmik tillar va dasturlash Mavzu Konteynerli tiplar va ularning qo’llanilishi .

21_15 guruh talabasi Aliqulov Umidjon

Reja 1.Kirish. 2.Konteyner sinflar. 3. Konteyner sinflarning turlari. 4.Massiv konteyner sinfi. 5.Xulosa.

Kirish 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.

Konteyner sinflarining turlari. Konteyner sinflari odatda ikki xil bo'ladi: 1- Qiymatli konteynerlar – bu obyektlarning nusxalarini saqlaydigan kompozitsiyalar (va shuning uchun bu nusxalarni yaratish / yo'q qilish uchun javobgardir). 2- Havola konteynerlari – boshqa obyektlarga ko'rsatgichlar yoki havolalarni saqlaydigan agregatsiyadir(shuning uchun bu ob'ektlarni yaratish/yo'q qilish uchun javobgar emas).

Massiv konteyner sinfi. Endi biz C++ tilida konteynerlar funksiyasini amalga oshirgan holda noldan butun sonli massiv sinfini yozamiz. Ushbu massiv klassi elementlarning o'zi emas, balki ularning nusxalarini saqlaydigan qiymat konteyneri turiga kiradi. Birinchidan, ArrayInt.h faylini yaratamiz: #ifndef ARRAYINT_H #define ARRAYINT_H class ArrayInt { }; #end

Bizning ArrayInt ikkita qiymatni kuzatishi kerak: ma'lumotlar va uning uzunligi. Biz massivimiz uzunligini o‘zgartirish imkoniyatiga ega bo‘lishini xohlayotganimiz uchun biz dinamik xotira ajratishdan foydalanishimiz kerak, ya’ni ma’lumotlarni saqlash uchun ko‘rsatgichdan foydalanamiz: #ifndef ARRAYINT_H #define ARRAYINT_H class ArrayInt { private: int m_length; int *m_data; }; #endif

Endi biz ArrayInt sinfi obyektlarini yaratish imkoniyatiga ega bo'lish uchun konstruktorlarni qo'shishimiz kerak. Biz ikkita konstruktorni qo'shamiz: birinchisi bo'sh massivni yaratadi, ikkinchisi berilgan o'lchamdagi massivni yaratadi: #ifndef ARRAYINT_H #define ARRAYINT_H #include class ArrayInt { private: int m_length; int *m_data; public: ArrayInt(): m_length(0), m_data(nullptr){ } ArrayInt(int length):{ m_length(length){ assert(length >= 0); if (length > 0) m_data = new int[length]; else m_data = nullptr; } }; #endif

Bizga ArrayIntni tozalaydigan funksiyalar ham kerak. Birinchidan, dinamik ravishda ajratilgan har qanday xotirani shunchaki ajratadigan destruktorni qo'shamiz. Ikkinchidan, biz massivni o'chiradigan va uning uzunligini 0 ga qaytaradigan erase() funksiyasini yozamiz: ~ArrayInt() { delete[] m_data; // Bu yerda m_data uchun null belgilash yoki // m_length = 0 qilish shart emas, chunki obyekt baribir yo'q qilinadi. } void erase() { // delete[] m_data; // Bu yerda biz m_data ni nullptr ga o'rnatishimiz kerak, //shunda chiqishda osilgan ko'rsatkich bo'lmaydi. m_data = nullptr; m_length = 0; }

Xulosa: Agar C ++ standart kutubxonasi sinfi sizning ehtiyojlaringizga to'liq javob bersa, o'z konteyner sinfingizni yozish o'rniga undan foydalaning. Masalan, ArrayInt o'rniga std :: vektor dan foydalanish yaxshidir, chunki std :: vektor ilovasi ko'p yillar davomida sinovdan o'tgan/tasdiqlangan, samarali va C sinfidagi boshqa sinflar bilan yaxshi ishlaydi. ++ Standart kutubxona. Ammo C ++ standart kutubxonasidan sinflardan foydalanish har doim ham imkoni bo'lmasligi mumkinl


Download 0.7 Mb.

Do'stlaringiz bilan baham:




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