• Massiv konteyner sinfi.
  • ArrayInt.h
  • 10-ma’ruza. Konteynerli tiplar va ularning qo’llanilishi. Konteyner sinflar va iteratorlar




    Download 278.14 Kb.
    Pdf ko'rish
    bet2/3
    Sana03.05.2023
    Hajmi278.14 Kb.
    #56090
    1   2   3
    Bog'liq
    10-ma’ruza. Konteynerli tiplar va ularning qo’llanilishi. Kontey
    7-sinf o\'zbekiston tarixi test, дафтар усти, ахборот, PERLA TOMATO, Informacionnyj list 1657746222398, inson va jamiyat, Aloqa xati, ipoteka, Asadbek Azizqulov Fizika, Sherzod dasturlash, dasturlash 4-amaliy topshiriq
    Konteyner sinflarining turlari. Konteyner sinflari odatda ikki xil bo'ladi: 
    Qiymatli konteynerlar – bu obyektlarning nusxalarini saqlaydigan kompozitsiyalar (va 
    shuning uchun bu nusxalarni yaratish / yo'q qilish uchun javobgardir). 
    Havola konteynerlari – boshqa obyektlarga ko'rsatgichlar yoki havolalarni saqlaydigan 
    agregatsiyadir(shuning uchun bu ob'ektlarni yaratish/yo'q qilish uchun javobgar emas). 
    Haqiqiy hayotdan farqli o'laroq, konteynerlar o'z ichiga joylashtirilgan har qanday turdagi 
    obyektni saqlashi mumkin bo'lsa, C++ da konteynerlar odatda faqat bitta ma'lumot turini o'z ichiga 
    oladi. Misol uchun, agar sizda butun sonli massiv bo'lsa, u faqat butun son qiymatlarini o'z ichiga 
    olishi mumkin. Boshqa ba'zi dasturlash tillaridan farqli o'laroq, C++ bir xil konteyner ichida turli 
    xil ma'lumotlar turlarini aralashtirishga ruxsat bermaydi. Agar sizga int va double qiymatlarini 
    saqlash uchun konteynerlar kerak bo'lsa, unda siz ikkita alohida konteyner yozishingiz kerak 
    bo'ladi (yoki biz tegishli darsda gaplashgan shablonlardan foydalaning). Foydalanish 
    cheklovlariga qaramay, konteynerlar juda foydali, chunki ular dasturlashni oson, xavfsizroq va 
    tezroq qiladi. 
    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 

    }; 
    #endif 
    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; 

     
    Endi massiv elementlariga kirish uchun indekslash operatorini [] qayta yuklaymiz. 
    Shuningdek, biz o'tgan indeksni tekshirishni amalga oshirishimiz kerak, bu eng yaxshi assert 
    bayonoti bilan amalga oshiriladi. Massiv uzunligini qaytarish uchun yordamchi funksiyani ham 
    qo‘shamiz: 

    Download 278.14 Kb.
    1   2   3




    Download 278.14 Kb.
    Pdf ko'rish

    Bosh sahifa
    Aloqalar

        Bosh sahifa



    10-ma’ruza. Konteynerli tiplar va ularning qo’llanilishi. Konteyner sinflar va iteratorlar

    Download 278.14 Kb.
    Pdf ko'rish