|
Konteyner sinflari
|
Sana | 24.01.2024 | Hajmi | 15,6 Kb. | | #144858 |
Bog'liq Konteyner sinflari Konteyner sinflari.
Ishning maqsadi:.
Kerakli jixoz va vositalar: kompyuter, video proyektor
Nazariy ma’lumot.
Konteyner sinflari
Hozirgacha eng ko'p ishlatiladigan STL funksionalligi konteyner sinflari (yoki ular "konteynerlar" deb ham ataladi). STL turli vaziyatlarda ishlatilishi mumkin bo'lgan juda ko'p turli xil konteyner sinflarini o'z ichiga oladi. Umuman olganda, STL konteynerlari uchta asosiy toifaga bo'linadi:
ketma-ket;
assotsiativ;
adapterlar.
Ketma-ket konteynerlar
Ketma-ket konteynerlar (yoki "ketma-ket konteynerlar") elementlari ketma-ket joylashgan konteyner sinflari. Ularning o'ziga xos xususiyati shundaki, siz elementingizni konteynerning istalgan joyiga qo'shishingiz mumkin. Ketma-ket konteynerning eng keng tarqalgan namunasi massivdir: massivga 4 ta element qo'shganda, bu elementlar siz qo'shganingizdek aniq tartibda (massivda) paydo bo'ladi.
C ++ 11 dan boshlab, STL 6 ta ketma-ketlik konteynerlarini o'z ichiga oladi:
std :: vektor;
std :: deque;
std :: massiv;
std :: ro'yxat;
std :: forward_list;
std :: basic_string.
Vektor sinfi (yoki oddiygina "vektor") dinamik massiv bo'lib, uning barcha elementlarini o'z ichiga olishi uchun kerak bo'lganda o'sadi. Vektor klassi [] indekslash operatori orqali o'z elementlariga o'zboshimchalik bilan kirish imkonini beradi, shuningdek, elementlarni qo'shish va olib tashlashni qo'llab-quvvatlaydi.
Quyidagi dasturda vektorga 5 ta butun son qo'shamiz va ularni keyinchalik ko'rsatish uchun kirish uchun haddan tashqari yuklangan indekslash operatoridan [] foydalanamiz:
bitta
2
3
4
5
6
7
sakkiz
9
10
11 #include
#o'z ichiga
int main ()
{
std :: vektor vect;
uchun (int count = 0; count <5; ++ count)
vect.push_back (10 - hisoblash); // massiv oxiriga raqamlar qo'shing
uchun (int indeks = 0; indeks std :: cout << vect [indeks] << ''
std :: cout << '\ n';
}
Dasturni bajarish natijasi:
10 9 8 7 6
Deque (yoki oddiygina "deque") klassi dinamik massiv sifatida amalga oshirilgan deque bo'lib, u har ikki tomondan ham o'sishi mumkin. Masalan:
bitta
2
3
4
5
6
7
sakkiz
9
10
o'n bir
12
o'n uch
14
15
o'n olti
17 #include
#o'z ichiga
int main ()
{
std :: deque deq;
uchun (int count = 0; count <4; ++ count)
{
deq.push_back (hisoblash); // massiv oxiriga raqamlarni kiriting
deq.push_front (10 - hisoblash); // massiv boshiga raqamlarni kiriting
}
uchun (int indeks = 0; indeks std :: cout << deq [indeks] << '';
std :: cout << '\ n';
}
Dasturni bajarish natijasi:
7 8 9 10 0 1 2 3
Roʻyxat (yoki oddiygina “roʻyxat”) ikki tomonlama bogʻlangan roʻyxat boʻlib, uning har bir elementi 2 ta koʻrsatkichdan iborat: biri roʻyxatning keyingi elementiga, ikkinchisi esa roʻyxatning oldingi elementiga ishora qiladi. ro'yxat faqat ro'yxatning boshi va oxiriga kirishni ta'minlaydi - tasodifiy kirish taqiqlanadi. Agar siz o'rtadagi biror qiymatni topmoqchi bo'lsangiz, unda siz izlayotgan narsani topmaguningizcha, bir chetidan boshlashingiz va ro'yxatning har bir elementini takrorlashingiz kerak. Ikki marta bog'langan ro'yxatning afzalligi shundaki, agar siz qaerga qo'shmoqchi bo'lsangiz, narsalarni qo'shish juda tezdir. Odatda, iteratorlar ikki marta bog'langan ro'yxat elementlarini takrorlash uchun ishlatiladi.
Garchi string (va wstring) klassi odatda ketma-ket konteyner sifatida aytilmasa ham, aslida u char (yoki wchar) tipidagi elementlarga ega vektor sifatida ko'rib chiqilishi mumkin.
Assotsiativ konteynerlar
Assotsiativ konteynerlar konteyner sinflari bo'lib, ularning barcha elementlarini (jumladan, siz qo'shganlarni) avtomatik ravishda saralaydi. Odatiy bo'lib, assotsiativ konteynerlar elementlarni to'plam faqat noyob elementlarni saqlaydigan konteyner bo'lib, dublikatlarga ruxsat berilmaydi. Elementlar qiymatlari bo'yicha saralanadi.
multiset - bu to'plam, lekin takroriy elementlarga ruxsat beriladi.
map (yoki "assotsiativ massiv") har bir element kalit-qiymat juftligi bo'lgan to'plamdir. "Kalit" ma'lumotlarni saralash va indekslash uchun ishlatiladi va noyob bo'lishi kerak. Va "qiymat" - haqiqiy ma'lumotlar.
multimap (yoki "lug'at") - takroriy kalitlarga ruxsat beruvchi xarita. Barcha kalitlar o'sish tartibida tartiblangan va siz qiymatni kalit bo'yicha ko'rishingiz mumkin.
Adapterlar
Adapterlar - bu muayyan vazifalar uchun mo'ljallangan maxsus, oldindan belgilangan konteyner sinflari. Qiziqarli tomoni shundaki, siz adapter qaysi seriyali konteynerdan foydalanishi kerakligini tanlashingiz mumkin.
stack - bu konteyner klassi, uning elementlari LIFO printsipi bo'yicha ishlaydi (inglizcha "Last In, First Out" = "Last In, First Out"), ya'ni. elementlar idishning oxiriga qo'shiladi (olib keladi) va u erdan (idishning oxiridan) chiqariladi (itariladi). Odatda steklar odatiy ketma-ket konteyner sifatida deque dan foydalanadi (bu biroz g'alati, chunki vektor yaxshiroq variant bo'lar edi), lekin siz vektor yoki ro'yxatni ham ishlatishingiz mumkin.
|
| |