Shablonlarsiz C++ da bir funksiyani turli xil tiplar ustida bajarish uchun har bir tur uchun alohida funcksiya yaratish kerak. Masalan(kiritilgan ifodani ekranga chiqarish):
#include
using namespace std;
template
void Print(T ifoda){
cout<< "ifoda = " << ifoda << endl;
}
int main() {
Print(2);
Print("salom");
Print(5.34);
return 0;
}
Shablon yaratish uchun avval template so’zi yoziladi keyin <> ichida class yoki typname sozi va shablonning nomi yozilishi yetarli. Misol uchun: template ifoda G turini hosil qiladi va bu tur dastur davomida ixtiyoriy boshqa turga o’tishi mumkin.
Ya’ni G 5; ifodada G int tipi bajaradigan funksiyani bajarsa G “ajoyib” ifodada G string ga o’zgaradi.
Shablonlar turi aniq bo’lmagan o’zgaruvchilar bilan ishlashda qo’l keladi.
Shablonlar: template myobject();
Korinishida ham bo’lishi mumkin bu holda shablon faqat tur_nomi ifodada yozilgan turnigina qabul qilishi mumkin.
Shablonlar standart kutubxonasi.
Ba’zi dasturlash tillarida malumotlar tuzilmalari ustida amallar bajarishni osonlashitirish maqsadida shablonlar standard kutubxonasidan foydalaniladi. STL (shablonlar kutubxonasi) ni uch qismga ajratishimiz mumkin ular:
1.konteynerlar
2.algoritmlar
3.iteratorlar
Kiritilgan ma’lumotni daturlash tili o’qiy oladigan ko’rinishda qabul qilish va joylash uchun konteynerlardan foydalaniladi. Konteynerlar malum bir turdagi obeyktlar to’plamini boshqarish uchun ishlatiladi. Dek, stek, massiv, list, vector, map kabilarni konteynerlarga misol qilib keltirishimiz mumkin.
Konteynerlar ustida qandadaydur, masalan qidirish yoki saralash amalini bajarish uchun algoritmlardan foydalaniladi.
Iteratorlar esa konteynerlarning biror bir qismiga otish uchun foydalaniladi.
#include
#include
using namespace std;
int main() {
// vektor yaratamiz
vector vec;
int i; // vec nimg orginal olchamini chiqaramiz
cout << "vector size = " << vec.size() << endl;
// 5gaca sonlarni ni qoshamiz
for(i = 0; i < 5; i++) { vec.push_back(i); }
// keyingi o'lchamini chiqaramiz.
cout << "keyingi olcham = " << vec.size() << endl;
for(i = 0; i < 5; i++) {
cout << " vec [" << i << "] = " << vec[i] << endl; }
//iteratordan foydalanib vektor elementlariga kiramiz.
vector::iterator v = vec.begin();
while( v != vec.end()) {
cout << "v = " << *v << endl; v++;
}
return 0; }
Iteratorlarning ishlatilishi.
Shablonlar kutubxonasi konteynerlari joylashgan xotira adresini ko’rsatish uchun
Iteratorlardan foydalaniladi. ular dasturning kompayling vaqtini qisqartiradi.
Iteratorlardan foydalanish uchun dasturga #include qatorni qo’shish ya’ni iterator kutubxonasini chaqirish kerak.
begin() – bu funksiya konteynerning boshlangich pozitsiyasidagi ya’ni 1-elementni qaytaradi.
end() – bu funsiya konteyner oxirgi elementidan bitta keyingi adresni qaytaradi.
Iteratrolar 5 turga bo’linadi ular:
Kiritish,
Chiqarish,
Ulashish(forward)
Ikki yo’nalishli
Random access
Kiritish va chiqarish iteratorlari eng ko’p cheklangan iteratorlardur. Ular faqat bir tomonlama kiritish yoki chiqarish amallarini bajarishi mumkin.
konteyner
konteyner
Uchinchi tur iteratorlar kiritish dastlabki ikktasi bajaradigan funksiyalarni deyarli hammasini bajara oladi lekin ular ham faqat bir tomonlama.
konteyner
Ikki yonalishli iteratorlar ham forward iteratorlaga o’xshaydi faqat ular orqa tomondan ham konteynerga kirishi mumkin.
konteyner
Random access iteratorlari esa konteynerning ixtiyoriy qismidan kira oladi.
konteyner
Ikki yo’nalishli iteratorga misol:
#include
#include
#include
using namespace std;
int main() {
vector vec{10, 20, 30, 40, 50, 60, 70, 80, 90, 100};
vector ::iterator it;
vector :: reverse_iterator rev_it;
for(it = vec.begin(); it != vec.end(); it++)
cout<<*it<<" "; cout<< endl;
for(rev_it = vec.rbegin();
rev_it!= vec.rend(); rev_it++)
cout<<*rev_it<<" ";
III.Xulosa
Bu mustaqil ishni bajarish orqali
Standart shablonlar kutubxonasi
Mavzusidagi bilimlarinmi mustahkamlab yanada boyitib oldim. Malumotlar bilan ishlashda STL juda qo’l kelar ekan. Iteratorlar haqida kengroq tushunchaga ega bo’ldim. STL kutubxonasi tayyor funksiyalaridan foydalanib murrakkab tuyulgan amallarni soddaroq kod yozib amalga oshirish mumkin. Konteynerlar malumotni massiz, list, dek kabilar korinishiga ketiradi, Iteratorlar malumotni ixtiyoriy qismiga o’tishni ta’minlaydi, algoritmlar esa malumot ustida ish bajarishga ko’maklashadi.