Chiziqli konreynerlar (array, vector, deque, list, forward list)


Download 0.62 Mb.
Pdf ko'rish
bet1/4
Sana21.04.2023
Hajmi0.62 Mb.
#1369410
  1   2   3   4
Bog'liq
w7SNJjWqKNvv4ApnEgt7btQ7Zr1HauLnnWEaFkms



Chiziqli konreynerlar (array, vector, deque, list, forward_list). Standart 
konteynerlarni ikkita katta guruhga chiziqli va assotsiativ konteynerlarga bo‘lishini 
bilamiz. O‘z navbatida chiziqli konteynerlarni bog‘langan ro‘yxat (forward_list va 
list) va tasodifiy kirish konteynerlariga (ekrin konteyner deb ham yuritiladi) (deque, 
vector va array) bo‘linadi. 
Assotsiativ konteynerlar quyidagi variantlarning kombinatsiyasi bo‘lgan 
sakkizta konteyner bilan ifodalanadi (tegishli standart sinflar nomlarining qavslar 
ichida beriladi): to‘plam (*set) yoki lug‘at (*map), elementlarni takrorlashga imkon 
beruvchi (*multi*) yoki ruxsat bermaydigan, tartibga solingan solinmagan 
(unordered*). 
Barcha konteynerlar iterator va const_iterator tiplari o‘z ichiga olish uchun o‘z 
navbatida o‘qish-yozish va faqat o‘qish iteratorlarini aniqlaydi. Konteyner tarkibida 
olgan iteratorlar oralig‘ini begin() va end() (o‘qish-yozish uchun iterator), 
shuningdek cbegin() va cend() (o‘qish uchun const_iterator) funksiyalari yordamida 
olish mumkin. Konteynerlar ikki tomonlama iteratorlar bilan ham teskari o‘tish 
uchun rbegin(), rend(), crbegin() va crend() funksiyalari mavjud. 
Barcha konteynerlarni empty funksiyasi tomonidan bo‘sh uchun tekshirish 
mumkin. Qachonki cont.begin() == cont.end() bo‘lsa, o‘zgarmas konteyner bo‘sh 
hisoblanadi. end() konteynerning oxirgi elementi keyingi shartli elementga havola 
qiluvchi iteratorni qaytaradi. Elementlar sonini size() funksiyasi yordamida olish 
mumkin (forward_list bundan mustasno). Konteyner tarkibidagi funksiyalarni 
tozalash uchun clear() funksiyasidan foylalaniladi (array bundan mustasno). 
Iteratorda begin(), end(), cbegin(), cend(), rbegin(), rend(), crbegin() va crend() 
erkin funksiyalarining shablonlarini aniqlash mumkin. Bular bir xil nomli 
funksiyalarga havola qilinadi, shuningdek, bunday aniqlangan funksiyalar statik 
massiv va std::valarray uchun aniqlandi. for(:) takrorlanish operatori xuddi shanday 
shakliga tayanadi. Masalan, cr bir konteyner bo‘lsin (shuningdek, statik massiv ham 
bo‘lishi mumkin), shunda dasturda for() fragmenti quyidagicha ishlatiladi. 
for (T x : cr) work(x); 
Semantik jihatdan quyidagi fragmentga teng 



using std::begin; 
using std::end; 
const auto e = end(cr); 
for (auto p = begin(cr); p != e; ++p) 
{ T x = *p; work(x); } 

Bu yerda T tipi konteyner elementlarining tipiga mos kelishi shart emas va auto 
asosida konstruksiya yoki havolali tip ham bo‘lishi mumkin (eng ko‘p ishlatiladigan 
variantlar auto& va auto&&). 
Chiziqli konteynerlarni (array dan boshqa) belgilangan qiymatlardan assign() 
funksiyasini chaqirib to‘ldirish mumkin (eski qiymalari o‘chiriladi) va resize() 
funksiyasi bilan o‘lchamlarini (hajmi kamayganda elementlar oxiridan o‘chiriladi 
va hajmi ortganda, yangi elementlar oxiridan qo‘shiladi) aniqlash mumkin. 
Konteynerning birinchi elementiga to‘g‘ridan-to‘g‘ri murojaat (tartiblanmagan 
assotsiativ konteynerlardan tashqari) front() funksiya yordamida amalga oshiriladi. 
Iteratorlari ikki tomonlama bo‘lgan barcha konteynerlarning oxirgi elementga 
murojaat uchun back() funksiyasi, shuningdek, teskari yo‘naltirilgan iteratorlar 
reverse_iterator va const_reverse_iterator funksiyalaridan foydalaniladi. Tegishli 
intervallarni rbegin(), rend() i crbegin(), crend() funksiyalari yordamida olish 
mumkin. 
Barcha konteynerlarni tenglik va tengsizlik uchun taqqoslash mumkin va 
ularning mazmunini swap() funksiyasi yordamida almashtirish mumkin. 
Chegaralanmagan assotsiativlardan tashqari barcha konteynerlarni <, <= , > va >= 
operatorlari leksikografik jihatdan taqqoslash mumkin. 
Standart konteynerlarda dinamik xotirani boshqarish uchun Allocator 
ajratuvchi maxsus sinflardan foydalanadi. Allocator xotirani boshqarishning 
minimal birligini belgilaydigan va bir qator yordamchi taʻriflarni taqdim etadigan 
element tipiga bog‘liqdir. Bu vazifa to‘rt asosiy funksiyalari yordamida amalga 
oshiriladi: elementlari berilgan qator uchun xotira ajratishda allocate, xotirani 


tozalash uchun deallocate, konstruktor qurish uchun construct, va destruktor 
uchun destroy. Allokator boshqa tipdagi elementlar uchun analog allokator 
olishda rebind metafunksiyasini amalga oshirishi kerak. 
Alloc – elementlarning aniq tiplari uchun allokator berilgan bo‘lsin. U tipli 
elementlar uchun uning allokatorini olish varianti quyidagi dastur fragmentida 
keltirilgan. 
using AllocForU = typename Alloc::template rebind::other; 
C++da 
standart 
kutubxona 
( 
sarlavha 
fayl 
bilan) 
new/new[] va delete/delete[] operatorlarini qo‘llash orqali allocator ni 
taʻminlaydi. Bundan model va o‘zingizning allokatorlaringgizni yozishda 
foydalanish mumkin. 

Download 0.62 Mb.

Do'stlaringiz bilan baham:
  1   2   3   4




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