Bu C++ tilida, bir qator yoki to'plama kabi ma'lumot tuzilmalari ustida


Download 77.86 Kb.
Pdf ko'rish
Sana15.06.2023
Hajmi77.86 Kb.
#1485946
Bog'liq
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 v barcha
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 il);
```
`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