Bu C++ tilida, bir qator yoki to'plama kabi ma'lumot tuzilmalari ustida
Download 77.86 Kb. Pdf ko'rish
|
2 mustaqil dastur
1-savol javobi Bu C++ tilida, bir qator yoki to'plama kabi ma'lumot tuzilmalari ustida harakat qilish uchun ishlatiladigan iteratorlar mavjud. Bu iteratorlar, tuzilmadagi elementlar orasida harakat qilish va o'zgartirish qilish imkoniyatini beradi. Bir qator yoki to'plamdan boshlanib, elementlar orasida harakat qilish uchun ishlatiladigan ba'zi ko'p amalga oshiriladigan iterator funksiyalari quyidagilardir: - begin() va end(): begin() funksiyasi, tuzilmaning birinchi elementiga bir belgi qaytaradi. end() funksiyasi esa, tuzilmaning oxirgi elementidan keyingi elementga ko'rsatuvchi bir belgi qaytaradi. Bu funksiyalar oddiy bir siklda ishlatiladi va tuzilmadagi barcha elementlarni aylantirish uchun ishlatiladi. - cbegin() va cend(): Bu funksiyalar, const bir qator yoki to'plam ustida harakat qilish uchun ishlatiladi. cbegin() funksiyasi, tuzilmaning birinchi elementiga const belgi qaytaradi. cend() funksiyasi esa, tuzilmaning oxirgi elementidan keyingi elementga ko'rsatuvchi bir const belgi qaytaradi. - rbegin() va rend(): Bu funksiyalar, bir qator yoki to'plamni oxiridan boshlab, elementlar orasida qaytadan orqaga harakat qilish uchun ishlatiladi. rbegin() funksiyasi, oxirgi elementdan boshlab iterator orqali elementlarni qaytaradi. rend() funksiyasi esa, tuzilmaning birinchi elementidan bir oldingi elementga ko'rsatuvchi bir iterator qaytaradi. - crbegin() va crend(): Bu funksiyalar, const bir qator yoki to'plamni oxiridan boshlab, elementlar orasida qaytadan orqaga harakat qilish uchun ishlatiladi. crbegin() funksiyasi, oxirgi elementdan boshlab const belgi orqali elementlarni qaytaradi. crend() funksiyasi esa, tuzilmaning birinchi elementidan bir oldingi elementga ko'rsatuvchi bir const belgi qaytaradi. Bu iterator funksiyalari, tuzilma ustida harakat qilish va elementlar ustida amal bajarish uchun juda muhimdir. 2-savol javobi C++ standart kutubxonasi, vector, deque va list kabi ko'p turdagi to'plamlarni chiziqli to'plamlar deb ataladigan bir qancha turdagi veri yig'indilari yig'inini o'z ichiga oladi. Ushbu veri yig'indilariga oid qo'shimcha amallar uchun turli funksiyalar mavjud. Qaysi funksiyalarni ishlatish kerakligi, amalni bajarish uchun veri yig'ini turi va amalning turi bilan bog'liq. Bundan tashqari, chiziqli bir konteynerga belgilangan qiymatlar bilan to'ldirish uchun std::fill() yoki std::fill_n() funksiyalari ishlatilishi mumkin. - std::fill() funksiyasi, ko'rsatilgan qatorning barcha elementlarini ko'rsatilgan qiymat bilan to'ldiradi. Misol uchun, vector elementlarini 0 bilan to'ldirish uchun quyidagicha ishlatilishi mumkin: ```c++ std::fill(v.begin(), v.end(), 0); ``` - std::fill_n() funksiyasi, ko'rsatilgan soni elementni ko'rsatilgan qiymat bilan to'ldiradi. Misol uchun, int turi massivi a'nin birinchi 5 elementini 1 bilan to'ldirish uchun quyidagicha ishlatilishi mumkin: ```c++ std::fill_n(a, 5, 1); ``` Ushbu funksiyalar, tez va qulay usulda chiziqli to'plamlarni ma'lum qiymatlar bilan to'ldirish uchun foydali bo'ladi. 3-savol javobi C++ dasturlash tili konteynerlarini tenglik va tengsizlik bo'yicha ikkiga ajratadi. Tenglikdagi konteynerlar, bir xil turdagi ma'lumot turlarini saqlash uchun ishlatiladi va ularning elementlari tekshirilgan joylarda saqlanadi. Tengsizlikdagi konteynerlar esa, bir nechta turdagi ma'lumot turlarini saqlash uchun ishlatiladi va ularning elementlari tuzilma ichida tasodifiy joylarda saqlanadi. Tengsizlikdagi konteynerlar avtomatik ravishda o'zgartirishlarga qarshi xavfsizligi ta'minlaydi. Barcha konteynerlar tenglik va tengsizlik uchun taqqoslash mumkin. C++ dasturlash tilida, konteynerlarning tengsiz variantlarini (vector, deque, list, set, map, unordered_set, unordered_map) ustun (template) funksiyalar yordamida ishlatiladi. Bu funksiyalar ma'lum bir turdagi elementlarni saqlaydigan konteynerlarga mos ravishda amal qiladi. Tenglikdagi konteynerlar esa, odatda standart bibliotekaning C-array yoki yana biror turdagi ma'lumot tuzilmasidan foydalanilgan holda yaratiladi. Bu holda konteynerlar, bu turdagi ma'lumotlarni saqlash uchun yaratilgan holda elementlarni saqlaydi. Konteynerlar arasidagi turini o'zgartirish uchun qo'llanadigan funksiyalar quyidagilardir: - `std::vector`: `std::vector` tenglikdagi konteyner bo'lib, ma'lum bir turdagi elementlar to'plamini saqlaydi. `std::vector` tengsizlikdagi `std::deque` bilan solishtirilishi mumkin. - `std::deque`: `std::deque` tengsizlikdagi konteyner bo'lib, ma'lum bir turdagi elementlar to'plamini saqlaydi. `std::deque` tenglikdagi `std::vector` bilan solishtirilishi mumkin. - `std::list`: `std::list` tengsizlikdagi konteyner bo'lib, ma'lum bir turdagi elementlar to'plamini saqlaydi. - `std::set`: `std::set` tengsizlikdagi konteyner bo'lib, elementlar to'plamini saqlaydi. Uning barcha elementlari tasodifiy tartibda saqlanadi. - `std::map`: `std::map` tengsizlikdagi konteyner bo'lib, kalitlar va qiymatlar orasidagi yozuvlarni saqlaydi. Uning barcha elementlari kalitlar bo'yicha tasodifiy tartibda saqlanadi. - `std::unordered_set`: `std::unordered_set` tengsizlikdagi konteyner 4- savol javobi Allocator C++ dasturlash tilidagi standart biblioteka qismi hisoblanadi va xotirani avtomatik ravishda alohida joylashgan ma'lumotlar uchun joy yaratishni va ishlatishni amalga oshiradi. C++ dasturlash tilida, allokatorlar ko'p xotira sarflanuvchilarini ishga tushirish va xotira bloklarini avtomatik ravishda chop etish uchun foydalaniladi. Allokatorlar, konteynerlar va boshqa qo'llanuvchilar tomonidan ishlatiladigan xotirani chaqirish uchun ma'lumot yaratish uchun foydalaniladi. Allokatorlar, alohida yaratilgan ma'lumotlar uchun xotirani belgilashda yordam beradi va konteynerlar, moslashtirilgan allokatorlarga asoslangan ko'p qat'iy ishlar bilan shug'ullanadi. Allocatorlar standart C++ konteynerlariga alohida yaratilgan xotirni belgilash uchun ishlatiladi va xotira sarflanuvchilari tizimining samaradorligini oshirish uchun yordam beradi. Xususan, alohida yaratilgan xotirning zararlarini kamaytirish va yordamida tizimni ishlatishni soddalashtirish uchun foydalaniladi. Allokatorlar konteynerlar va boshqa qo'llanuvchilar tomonidan ishlatiladigan xotirni chaqirish uchun ma'lumot yaratish uchun foydalaniladi. Allokatorlar, konteynerlar va boshqa qo'llanuvchilar tomonidan ishlatiladigan xotirni chaqirish uchun ma'lumot yaratish uchun foydalaniladi. Allokatorlar, alohida yaratilgan ma'lumotlar uchun xotirani belgilashda yordam beradi va konteynerlar, moslashtirilgan allokatorlarga asoslangan ko'p qat'iy ishlar bilan shug'ullanadi. 5-savol javobi Allocator, alohida yaratilgan xotirni boshqarishning minimal birligini belgilaydigan va bir qator yordamchi taʻriflarni taqdim etadigan element tipiga bog'liqdir. Bu minimal birligi odatda "byte" deb ataladi. Allocator, konteynerlar va boshqa qo'llanuvchilar tomonidan ishlatiladigan xotirni chaqirish uchun ma'lumot yaratishda yordam beradi. Allocator tipi, alohida yaratilgan xotirni belgilash uchun moslashtirilgan va istalgan elementlar uchun yordamchi funksiyalarni o'z ichiga oladi. Bu funksiyalar alohida yaratilgan xotirni boshqarish va uni chaqirish uchun foydalaniladi. Xususan, Allocator alohida yaratilgan xotirning zararlarini kamaytirish uchun yordam beradi va yordamida tizimni ishlatishni soddalashtirish uchun foydalaniladi. Allocatorlar, alohida yaratilgan xotirni belgilashda va istalgan xotira bloklarini avtomatik ravishda chop etishda yordam berish uchun foydalaniladi. Allocator tipi, alohida yaratilgan xotirni belgilash uchun moslashtirilgan va istalgan elementlar uchun yordamchi funksiyalarni o'z ichiga oladi. Bu funksiyalar alohida yaratilgan xotirni boshqarish va uni chaqirish uchun foydalaniladi. Alohida yaratilgan xotir bloklarining o'lchamida o'zgarishlarni amalga oshirish uchun Allocator alohida yaratilgan xotirni boshqarish uchun funksiyalar yordamida ishlatiladi. Allocator alohida yaratilgan xotirni chaqirish uchun ma'lumot yaratishda yordam beradi va bu konteynerlarda va boshqa qo'llanuvchilar tomonidan ishlatiladigan xotirni boshqarishda katta yordam ko'rsatadi. 6-savol javobi Bu vazifani bajarish uchun quyidagi asosiy funksiyalar yordamida ishlatilishi mumkin: 1. begin() va end() funksiyalari - Bir konteynerdagi birinchi va oxirgi elementlarni qaytarish uchun ishlatiladi. 2. size() funksiyasi - Bir konteynerdagi elementlar sonini qaytarish uchun ishlatiladi. 3. push_back() funksiyasi - Bir konteynerga yangi element qo'shish uchun ishlatiladi. 4. pop_back() funksiyasi - Bir konteynerdan oxirgi elementni o'chirish uchun ishlatiladi. 5. erase() funksiyasi - Bir konteynerdan bir nechta elementni o'chirish uchun ishlatiladi. 6. clear() funksiyasi - Bir konteynerdagi barcha elementlarni o'chirish uchun ishlatiladi. Bu funksiyalar, konteynerlarni ma'lumotlarni qayta ishlash, ko'chirish va o'chirish uchun yordam beradi. Konteynerlar va ularning asosiy funksiyalari, ma'lumotlar tuzilmasini boshqarish uchun qulay yechimlar hisoblanadi. Konteynerlar C++ dasturlash tilida juda ko'p ishlatiladi va bir nechta turi mavjud bo'lib, ularga mos keladigan asosiy funksiyalar ham mavjud. 7-savol javobi Bog‘lamli ro‘yxatni yaratish uchun A::rebind orqali yaratilgan allokatordan foydalaniladi, bu allokatorda birinchi tur allokatorda mavjud bo‘lgan obyektning turiga mos keladigan obyekt yaratiladi. A::rebind shablon funksiyasi allokatordagi elementlarning turini o‘zgartirishga mo‘ljallangan bo‘lib, uni ikkinchi turda yaratilgan elementlarni alohida aloqador bo‘lib turli xil ma‘lumot tuzilmalarini yaratish imkoniyatini beradi. Bog‘lamli ro‘yxatlar shablonli tur hisoblanadi, shuning uchun, allokatorni o‘zgartirish mumkin bo‘lgan ma’lumot turiga mos keladigan turda yaratish uchun A::rebind dan foydalaniladi. 8- savol javobi C++ dasturida, bir konteynerdagi elementlarni oldindan joylashtirish uchun `insert()` funksiyasidan foydalaniladi. Bu funksiya bir konteynerga yangi elementlarni qo'shish va konteynerdagi mavjud elementlarni belgilangan joylarga joylash uchun ishlatiladi. `insert()` funksiyasining asosiy sintaksi: ``` iterator insert (iterator position, const value_type& val); iterator insert (iterator position, size_type n, const value_type& val); template iterator insert (iterator position, InputIterator first, InputIterator last); iterator insert (iterator position, value_type&& val); iterator insert (iterator position, initializer_list ``` `insert()` funksiyasining birinchi sintaksi, bir elementni berilgan joyga joylash uchun ishlatiladi. Ikkinchi sintaksi, bir nechta elementlarni bir nechta marta qo'shish uchun ishlatiladi. Uchunchi sintaksi, bir konteynerga boshqa bir konteynerdagi elementlarni joylash uchun ishlatiladi. To'rtinchi sintaks, konteynerga rivojlanayotgan elementlarni qo'shish uchun ishlatiladi. To'rtinchi sintaks esa, konteynerga elementlarni olib kelish uchun ishlatiladi. `insert()` funksiyasi, bir iterator orqali ma'lum bir pozitsiyaga yangi elementlarni joylash uchun ishlatiladi. Bu funksiya, belgilangan pozitsiyaga elementlarni joylashda va o'z ichiga olishda kuchliroq va samaraliroq hisoblanadi. 9- savol javobi Ikki bog‘lamli ro‘yxat va ikki tomonlama navbatlar haqida: 1. Ikki bog‘lamli ro‘yxat: Ikki bog‘lamli ro‘yxat, birinchi bog‘lamda bitta element va ikkinchi bog‘lamda boshqa element bor bo‘lgan ro‘yxatlardir. Bu ro‘yxatlarning elementlari odatda bitta element bo‘lib, bu elementning ikki xil qismi mavjud. Bitta qismi, asosiy element sifatida xizmat qiladi, ikkinchi qismi esa bitta qismni yoritadi. Ikki bog‘lamli ro‘yxatlarni to‘g‘ridan-to‘g‘ri (direct) yoki ortiqcha (reverse) tarzda o‘qish mumkin. 2. Ikkilik navbat: Ikkilik navbat, birinchi tomon va ikkinchi tomon bo‘lmagan navbatdir. Bu navbat turi, tomonlar orasidagi aloqa mavjudligidan qat'iy nazar, iqtisodiy va samarali yordamchi hisoblanadi. Birinchi tomon bilan aloqa bajarilganda, ikkinchi tomon ham o'zini tayyorlab turadi. Shuningdek, ikkinchi tomon bajarilganda, birinchi tomon ham o'zini tayyorlab turadi. Ikkilik navbatda, bitta tomon ustida boshqa bir tomon borligi uchun, bitta tomondan boshqa tomonni ochish va yopish imkoniyati yaratiladi. Bu tomonlar odatda, bitta konteynerning o‘ziga xos konteynerlaridir. 10-savol javobi Dinamik va statik massivlar, ikkala siyohli massivlar bo‘lib, ularda turli xil elementlar saqlanadi. Ammo ularning o‘zaro farqlari mavjud. Quyidagi misollar orqali bu farqlarni tushunish mumkin: 1. Dinamik massivlar: Dinamik massivlar, program ishga tushirilgan vaqtda ko‘rsatgichlari orqali yaratiladi. Dinamik massivlar, malloc() yoki new operatorlari yordamida yaratiladi va ularning o‘zgaruvchan hajmlari o‘zgartirilishi mumkin. Shuningdek, dinamik massivlar siz o‘zgartirilgan o‘zgaruvchanni o‘chirish yoki yana yaratish orqali o‘zgaruvchan hajmini yangilash imkoniyatiga ega. Masalan: ``` // dinamik massiv yaratish int *d_arr = new int[5]; // elementlarni yuklash d_arr[0] = 1; d_arr[1] = 2; d_arr[2] = 3; d_arr[3] = 4; d_arr[4] = 5; // o'zgaruvchan hajmini o'zgartirish d_arr = new int[10]; // yangi elementlarni yuklash d_arr[5] = 6; d_arr[6] = 7; d_arr[7] = 8; d_arr[8] = 9; d_arr[9] = 10; // dinamik massivni ochirish delete[] d_arr; ``` 2. Statik massivlar: Statik massivlar dastur yozilgandan oldin, yoki dastur ishga tushirilgandan keyin avval yaratiladi. Statik massivlar, yordamida o‘zgaruvchan hajmlari o‘zgartirilmaydi, bu hajmlar, massiv yaratilgan paytda aniqlanadi. Statik massivlar odatda, bir funksiyada aniqlanadi va boshqa funksiyalar ham ularga murojaat qilishi mumkin emas. Masalan: ``` // statik massiv yaratish int s_arr[5]; // elementlarni yuklash s_arr[0] = 1; s_arr[1] = 2; s_arr[2] = 3; s_arr[3] = 4; s_arr[4] = 5; // statik massivni ishlatish for(int i = 0; i < 5; i++){ cout << s_arr[i] << " "; } ``` Shu sabablarga ko‘ra, dinamik massivlar o‘zgaruvchan hajmlari bo‘yicha muntazam o‘zgarishlarga ruxsat beradi, buning aksincha, statik massivlar ko‘p xil funksiyalarda murojaat qilishga ruxsat beradi. 11-savol javobi Statik massivlar kiritish va o'chirish uchun funksiyalar mavjud emas, chunki ular o'z ichida xotira egalarini saqlaydi va olgan joydan boshqa joyga ko'chirish imkoni yo'q. Statik massiv elementlarini to'liq ravishda o'rnatish uchun esa dastur yozish davomida o'zgaruvchan miqdorda (`const`) elementlarni to'g'ridan-to'g'ri ma'lum qiymatlarga tenglashtirish yoki dastur boshida yoki tashqi faylda aniqlangan ma'lumotlarga (`constexpr`) asoslangan qiymatlarga tenglashtirish mumkin. O'chirish uchun esa massivni to'liq ravishda o'chirish imkoni yo'q, ammo elementlarni alohida o'chirib tashlash mumkin. Download 77.86 Kb. Do'stlaringiz bilan baham: |
Ma'lumotlar bazasi mualliflik huquqi bilan himoyalangan ©fayllar.org 2024
ma'muriyatiga murojaat qiling
ma'muriyatiga murojaat qiling