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.
Do'stlaringiz bilan baham: