720-21gurxFayzullayev Umarxon Mavzu: Shablonlarning standart kutubxonasi (stl). Stl komponentalar
Mavzu: Shablonlarning standart kutubxonasi (stl). Stl komponentalar
Umumlashgan yoki unifikasiyalangan dasturlashning maqsadi tartiblash kabi ko‘p qo‘llaniluvchi algoritmlar va sinflar saqlanuvchi universal kutubxonalar yaratish orqali dasturlash jarayonin avtomatlashtirishdan iboratdir. Shu bilan birga, bu kutubxonaga kiruvchi funksiyalar universal xarakterga ega bo‘lishi, ya’ni ixtiyoriy turdagi ma’lumotlar ustida amallar bajarish imkonini berishi lozim.
STL bilan tanishish
Umumlashgan yoki unifikasiyalangan dasturlashning maqsadi tartiblash kabi ko‘p qo‘llaniluvchi algoritmlar va sinflar saqlanuvchi universal kutubxonalar yaratish orqali dasturlash jarayonin avtomatlashtirishdan iboratdir. Shu bilan birga, bu kutubxonaga kiruvchi funksiyalar universal xarakterga ega
bo‘lishi, ya’ni ixtiyoriy turdagi ma’lumotlar ustida amallar bajarish imkonini berishi lozim.
Shablonlarga asoslangan umumlashgan dasturlashga misol Stepanov
va Target tomonidan yaratilgan va C++ tili standartiga kiritilgan STL (Standart Template Library) kutubxonasidir.
Konteynerlar
Algoritmlar
Iteratorlar
Kutubxona yadrosi uchta elementdan iborat
Konteynerlar — bu boshqa elementlarni saqlash uchun mo‘ljallangan sinflar shablonlaridir. Konteynerlar asosiy xususiyati shundaki ular ixtiyoriy tipdagi elementlarni o‘zida saqlash uchun mo‘ljallangan. To‘g‘rirog‘i, har bir tur uchun shablon nusxasi kerak bo‘lganda, kompilyator tomonidan
avtomatik tarzda yaratiladi. Algoritmlar konteyner elementlari ustidan operasiyalar bajaradi.
Konteynerlar — bu boshqa elementlarni saqlash uchun mo‘ljallangan sinflar shablonlaridir. Konteynerlar asosiy xususiyati shundaki ular ixtiyoriy tipdagi elementlarni o‘zida saqlash uchun mo‘ljallangan. To‘g‘rirog‘i, har bir tur uchun shablon nusxasi kerak bo‘lganda, kompilyator tomonidan
avtomatik tarzda yaratiladi. Algoritmlar konteyner elementlari ustidan operasiyalar bajaradi.
Bibliotekada qidirish, saralash va almashtirish uchun algoritmlar mavjud. Algoritmlar elementlar ketma_ketligi
bilan ishlash uchun mo‘ljallangan. Algoritmlar asosiy xususiyati shuki ular ixtiyoriy konteynerlar bilan ishlay oladi.
vector — dinamik massiv list — chiziqli ro‘yxat deque — ikki tarafli tartib set — to‘plam
multiset — har bir elementi noyob bo‘lishi shart emas to‘plam Konteynerlar asosiy va hosila konteynerlarga ajratiladi. Asosiy konteynerlarga quyidagilar kiradi:
multimap — har bir kalit bilan ikkita yoki ko‘proq qiymatlarbog‘langan Hosila konteynerlarga quyidagilar kiradi:
multimap — har bir kalit bilan ikkita yoki ko‘proq qiymatlarbog‘langanHosilakonteynerlargaquyidagilar kiradi:
STL kutubxonasidagi standart shablonlardan foydalanish uchun kerakli header fayllarni dasturga ulash lozim.
vector
Birinchi bo’lib STL dagi vector bilan ishlaymiz. Buning uchun vector header faylini dasturga ulaymiz.
Vector tipidagi o’zgaruvchi yaratamiz. Buning uchun vector var_name
Vector tipidagi o’zgaruvchi yaratamiz. Buning uchun vector var_name
Bu yerda
type – vector tarkikibiga kiruvchi o’zgaruvchilarning toifasi var_name – vectorning nomi
STL kutubxonasidagi maxsus vectorning ichiga ma’lumot qo’shish uchun quyidagi funksiyadan foydalaniladi.
push_back( value )
- value –vectorga qo’shiluvchi qiymat
Vector v = new Vector(int size);
Iteratorlar — bu konteyner hamma elementlarini ko‘rib chiqish va qayta ishlashga imkon beruvchi obyektlardir. Iteratorlar algoritmlar universalligini ta’minlovchi asosiy vositadir.
Iteratorlar — bu konteyner hamma elementlarini ko‘rib chiqish va qayta ishlashga imkon beruvchi obyektlardir. Iteratorlar algoritmlar universalligini ta’minlovchi asosiy vositadir.
Itaratorlar bilan ko‘rsatkichlar kabi ishlash mumkin. Ularga
*, inkrement, dekrement operatorlarni qo‘llash mumkin. Iterator tipi sifatida xar xil konteynerlarda aniqlangan iterator tip e’lon qilinadi.
Iteratorlarning beshta tipi mavjud:
Kiritishiteratorlar(input_iterator)tenglik,nomini o‘zgartirish va inkrementa operatsiyalarni qo‘llaydi.
==, !=, *i, ++i, i++, *i++
Kiritish iteratsiyasining maxsus xolati istream_iterator iborat.
Chiqarishiteratorlar(output_iterator)o‘zlashtirish operatorning chap tarafidan imkon bo‘lgan isimning o‘zgartirish va inkrementa operatsiyalar qo‘llanadi. Chiqarishiteratorlar(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.
Bittayo‘nalishdagiiteratorlar(forward_iterator)
kiritish/chiqarish operatsiyalarning barchasini qo‘llaydi, bundan tashqari chegarasiz o‘zlashtirishning imkonini beradi.
==, !=, =, *i, ++i, i++, *i++
Ikki yo‘nalishdagi iteratorlar (biderectional_iterator) forward-iteratorlarning barcha xususiyatlariga ega, bundan tashqari,konteynerniikkitayo‘nalishibo‘yichao‘tishimkonini beradigan qo‘shimcha dekrementa (--i, i--, *i--) operatsiyasiga ega.
Ixtiyoriy ruxsatga ega bo‘lgan iteratorlar (random_access_iterator)biderectional-iteratorlarningbarcha xususiyatlariga ega, bundan tashqari solishtirish va manzil arifmetikasi operatsiyalarni qo‘llaydi. Ixtiyoriy ruxsatga ega bo‘lgan iteratorlar (random_access_iterator)biderectional-iteratorlarningbarcha xususiyatlariga ega, bundan tashqari solishtirish va manzil
arifmetikasi operatsiyalarni qo‘llaydi.
i+=n, i+n, i-=n, i-n, i1-i2, i[n], i1<=i2, i1>i2, i1>=i2 Shuningdek, STLda teskari iteratorlar (reverse iterators)
qo‘llaniladi. Ketma-ketlikni teskari yo‘nalishda o‘tuvchi ikki yo‘nalishli yoki ixtiyoriy ruxsatga ega bo‘lgan iteratorlar
teskari iteratoralar bo‘lishi mumkin. Iterator itr = collection.iterator();