O’g’li (sirtqi) guruh



Download 38,15 Kb.
bet1/2
Sana22.07.2022
Hajmi38,15 Kb.
#837472
  1   2
Bog'liq
23-varianttt


o’g’li (sirtqi) guruh
Dasturlash II fanidan Yakuniy nazorat savollari:

23-variant.
1.Bir aloqali ro‘yxatning nimalarini yaratish uchun A::rebind orqali yaratilgan allokatorday foydalaniladi?
2.Iteratorda begin(), end(), cbegin(), cend(), rbegin(), rend(), crbegin() va crend() erkin funksiyalari nimalarini aniqlashi mumkin?
3.Berilgan char turidagi to’plamning 1 ta so’zdan iborat elementlarini o’chiruvchi va 1 ta so’zdan iborat elementidan 2- to’plamni hosil qiluvchi hamda ularni ekranga chiqaruvchi dastur tuzing.


Javoblar:
1. 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.
Bir aloqali ro‘yxat . forward_list> bir tomonlama iterator orqali T tipdagi elementlarga kirishni taʻminlaydi. Ro‘yxatning tugunlarini yaratish uchun A::rebind orqali yaratilgan allokatorday foydalaniladi. Bir aloqali ro‘yxatning o‘ziga xosligi shundaki, faqat belgilangan joriy tugundan keyin elementlarni qo‘shish va o‘chirish mumkin:
insert_after - element qo‘shish.
emplace_after – yangi element yaratish. Bunda belgilangan parametrlar uchun konstruktor chaqiriladi.
erase_after - element o‘chirish.
Birinchi elementdan oldin degan ko‘shimcha aniqlangan pozitsiya mavjud. Bu before_begin va cbefore_begin (const_iterator qaytaruvchilar uchun variant) funksiyalari yordamida bajariladi. Shuningdek, fl.push_front(item) funksiyasidan foydalanib, elementlarni oldindan joylashtirish mumkin (yuqoridagiga ekvivalent), masalan, quyidagicha dastur fragmenti:

fl.insert_after(fl.before_begin(), item)

Konstruktorga har qanday parametrlarni joylashtirish uchun fl.emplace_front(...) funksiyasi ishlatiladi. Bunga ekvivalent sifatida quyidagi dastur fragmentini yozish mumkin:

fl.emplace_after(fl.before_begin(), ...)

  pop_front funksiyasi ro‘yxatdan birinchi elementni o‘chiradi. 
C++ standart kutubxonasida ro‘yxat konteynerlar xususiyati uchun samarali bo‘lgan amallarni bajarishga faqat iteratorlarda foydalanishga ishonchsizligi yuqori darajali amallarni qo‘llab-quvvatlash hisoblanadi:
merge - ikkita tartiblangan ro‘yxatni bir-biriga birlashtiradi, elementlar ko‘chirilmaydi lekin o‘ngdan chap ro‘yxatga o‘tiladi
splice_after - berilgan ro‘yxatni ko‘rsatilgan elementdan keyin joylashtiradi.
remove – berilgan elementga teng bo‘lgan barcha elementlarni o‘chiradi.
remove – berilgan pridikat asosida barcha elementlarni o‘chiradi.
reverse – elementlarni tartibiga murojaat qiladi.
unique - barcha ketma-ket dublikatlarni o‘chiradi.
sort - ro‘yxatni joyida tartiblaydi.
Umuman olganda, bu funksiyalar qandaydir standart algoritmlarga o‘xshaydi, lekin juda tez va qulay ishlaydi. Ularga murojaat qilish uchun umumiy ruxsat olish kerak, masalan, sort() funksiyasi uchun std::sort(from, to). Ammo, tasodifiy kirish iteratorlari kabi talab qilingan ro‘yxatlar uchun amal qilmaydi.


2. Iteratorlar (iterators) – bu konteynerga nisbatan ko‘rsatkich sifatida bo‘lgan ob’ektlar. Ular massiv elementlariga ruxsat oluvchi ko‘rsatkichlar kabi, konteyner ichidagiga ruxsat olish imkoni beradi.
Itaratorlar bilan ko‘rsatkichlar kabi ishlash mumkin. Ularga *, inkrement, dekrement operatorlarni qo‘llash mumkin. Iterator tipi sifatida xar xil konteynerlarda aniqlangan iterator tip elon qilinadi. Itoratorlarning beshta tipi mavjud:
1. Kiritish iteratorlar (input_iterator) tenglik, nomini o‘zgartirish va inkrementa operatsiyalarni qo‘llaydi.
==, !=, *i, ++i, i++, *i++
Kiritish iteratsiyasining maxsus xolati istream_iterator iborat.
2. Chiqarish iteratorlar (output_iterator) o‘zlashtirish operatorning chap tarafidan imkon bo‘lgan isimning o‘zgartirish va inkrementa operatsiyalar qo‘llanadi.
++i, i++, *i=t, *i++=t
Chiqarish iteratsiyasining maxsus xolati ostream_iterator.
3. Bitta yo‘nalishdagi iteratorlar (forward_iterator) kiritish/chiqarish operatsiyalarning barchasini qo‘llaydi, bundan tashqari chegarasiz o‘zlashtirishning imkonini beradi.
==, !=, =, *i, ++i, i++, *i++
4. Ikki yo‘nalishdagi iteratorlar (biderectional_iterator) forward-iteratorlarning barcha xususiyatlariga ega, bundan tashqari, konteynerni ikkita yo‘nalishi bo‘yicha o‘tish imkonini beradigan qo‘shimcha dekrementa (--i, i--, *i--) operatsiyasiga ega.
5. Ixtiyoriy ruxsatga ega bo‘lgan iteratorlar (random_access_iterator) biderectional-iteratorlarning barcha xususiyatlariga ega, bundan tashqari solishtirish va manzil arifmetikasi operatsiyalarni qo‘llaydi.
i+=n, i+n, i-=n, i-n, i1-i2, i[n], i1i2, i1>=i2
Iteratorlarni olish usullari
 begin() birinchi elementga ko‘rsatadi;
 end() oxiridan keyingi elementga ko‘rsatadi;
 rbegin() teskari ketma-ketlikdagi birinchi elementni ko‘rsatadi;
 rend() teskari ketma-ketlikdagi oxirgidan keyingi elementni ko‘rsatadi Elementlarga ruxsat
 front() birinchi elementga ilova;
 Back() oxiri elementga ilova;
 operator[](i) tekshirishsiz indeks bo‘yicha ruxsat;
 at(i) tekshirish bilan indeks bo‘yicha ruxsat.
 front() birinchi elementga ilova; Elementlarni kiritish usullari
 insert(p,x) r ko‘rsatgan elementdan oldin xni qo‘shish
 insert(p,n,x) rdan oldin xning n nusxalarini qo‘shish
 insert(p,first,last) rdan oldin [first:last]dagi elementlarni qo‘shish
 push_back(x) oxiriga xlarni qo‘shish
 push_front(x) yangi birinchi elementni qo‘shish (ikta uchga ega bo‘lgan tartiblar va ro‘yxatlar uchun)
Elementlarni o‘chirish usullari
 erase(p) r pozitsiyadagi elementni o‘chirish;
 erase(first,last) [first:last]dan elementlarni o‘chirish;
 pop_back() oxirgi elementni o‘chirish;
 pop_front() birinchi elementni o‘chirish (ikta uchga ega bo‘lgan tartiblar va ro‘yxatlar uchun)
O‘zlashtirish usullari
 operator=(x) konteynerga x konteynerni elementlari o‘zlashtiriladi;

3. Berilgan char turidagi to’plamning 1 ta so’zdan iborat elementlarini o’chiruvchi va 1 ta so’zdan iborat elementidan 2- to’plamni hosil qiluvchi hamda ularni ekranga chiqaruvchi dastur tuzing.

Download 38,15 Kb.

Do'stlaringiz bilan baham:
  1   2




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

kiriting | ro'yxatdan o'tish
    Bosh sahifa
юртда тантана
Боғда битган
Бугун юртда
Эшитганлар жилманглар
Эшитмадим деманглар
битган бодомлар
Yangiariq tumani
qitish marakazi
Raqamli texnologiyalar
ilishida muhokamadan
tasdiqqa tavsiya
tavsiya etilgan
iqtisodiyot kafedrasi
steiermarkischen landesregierung
asarlaringizni yuboring
o'zingizning asarlaringizni
Iltimos faqat
faqat o'zingizning
steierm rkischen
landesregierung fachabteilung
rkischen landesregierung
hamshira loyihasi
loyihasi mavsum
faolyatining oqibatlari
asosiy adabiyotlar
fakulteti ahborot
ahborot havfsizligi
havfsizligi kafedrasi
fanidan bo’yicha
fakulteti iqtisodiyot
boshqaruv fakulteti
chiqarishda boshqaruv
ishlab chiqarishda
iqtisodiyot fakultet
multiservis tarmoqlari
fanidan asosiy
Uzbek fanidan
mavzulari potok
asosidagi multiservis
'aliyyil a'ziym
billahil 'aliyyil
illaa billahil
quvvata illaa
falah' deganida
Kompyuter savodxonligi
bo’yicha mustaqil
'alal falah'
Hayya 'alal
'alas soloh
Hayya 'alas
mavsum boyicha


yuklab olish