2-rasm Stack
Stack ko’rinishidagi konteynerlar bilan ishlash. Buning uchun stack header faylini dasturga ulash lozim.
Stack ustida amalga oshiriladigan amallar:
1. PUSH( i ) - stackga elеmеnt kiritish, i - stackga kiritiladigan elеmеnt
2. POP ( ) - stackdan elеmеntni tanlash. Elеmеnt tanlanayotganda o’zi egallab turgan ishchi xotiraga joylashtiriladi;
EMPTY ( ) - stackni bo’sh yoki bo’sh emasligini tеkshirish (true - bo’sh,
false bo’sh emas);
TOP ( ) - stack yuqori elеmеntini o’chirmasdan o’qish.
Stack tipidagi o’zgaruvchini quydagicha e’lon qilishimiz lozim.
stack stack_name;
#include
#include
using namespace std;
int main()
{
stack sc;
sc.push(12);
sc.push(33);
sc.push(66);
while(!sc.empty())
{
cout<
sc.pop();
}
}
lower_bound(elem) element qo‘yish mumkin bo‘lgan birinchi pozitsiyani to‘padi
upper_bound(elem) element qo‘yish mumkin bo‘lgan oxirgi pozitsiyani to‘padi
equal_range(elem) element qo‘yish mumkin bo‘lgan birinchi va oxirgi pozitsiyalarni to‘padi
Assotsiativ usullar
operator[](k) k kalitli elementga ruxsat;
find(k) k kalitli element pozitsiyasini topadi;
lower_bound(k) k kalitli elementning birinchi pozitsiyasini topadi;
upper_bound(k) kdan katta bo‘lgan kalitli birinchi elementni to‘padi;
equal_range(k) k kalitli elementni lower_bound (kuyi chegarasini) va upper_bound (yuqori chegarasini) topadi.
Boshqa usullar
size() elementlar soni;
empty() konteyner bo‘shmi?
capacity() vektor uchun ajratilgan xotira (faqat vektorlar uchun);
reserve(n) n elementdan iborat bo‘lgan konteyner uchun xotira ajratadi;
swap(x) ikkita konteynerlarni joyini almashtirish;
==, !=, < solishtirish operatorlari
2. Shablon (template) tushunchasi va ularning qo‘llanilishi. Funksiya shablonlarini, sinf shablonlarini yaratish usullari va ularning qo‘llanilishi. Ishning maqsadi: C++ dasturlash tilida shablon funksiya va ularni overload qilish ko‘nikmalarini shakllantirish. Masalaning qo‘yilishi: Tur xil to‘plamlarni qayta ishlovchi funksiya shablonlarini yaratish. Masala: Har – xil turdagi to‘plamlar berilgan. Agar to‘plam int turida bo‘lsa, uning elementlarini max va min larini o‘rtasidagi elementlarni aniqlovchi, agar to‘plam string turida bo‘lsa, uning toq uzunlikdagi elementlarini o‘chiruvchi funksiya shablonini tuzing. Masalani yechish g‘oyasi: 1 ta funksiya shabloni tuziladi. Standart turlar bilan Funksiyaga parameter sifatida kirib keledigan to‘plamni tur 9 Har-xil turdagi to‘plamlar berilgan. Agar to‘plam float turida bo‘lsa, uni elementlarining raqamlari teskasini (a=123; natija a=321) aniqlovchi, agar to‘plam char turida bo‘lsa, uning elementlari nechta so‘zdan iborat ekanligini aniqlovchi funksiya shablonini tuzing. #include #include char* cstrdup(const char* src) { return std::strcpy(new char[std::strlen(src) + 1] , src); } // -------------- class product { private: char* name_; int count_; float price_; public: product(const char* name, int count, float price) : name_(cstrdup(name)), count_(count), price_(price) { } product(const product& rhs) : name_(cstrdup(rhs.name_)), count_(rhs.count_), price_(rhs.price_) { } product& operator=(const product& rhs) { if(&rhs != this) { delete[] name_; name_ = cstrdup(rhs.name_); count_ = rhs.count_; price_ = rhs.price_; } return *this; } ~product() { delete[] name_; } void print(std::ostream& stream = std::cout) const { stream << "name: " << name_ << "\n" "count: " << count_ << "\n" "price: " << price_ << "\n"; } }; int main() { product some_product("some product", 100, 1.5); some_product.print();
}
4. XULOSA
Funktsiyalar va sinflar samarali dasturlash uchun kuchli va moslashuvchan vositalar bo'lsa-da, ular ba'zi hollarda C++ ning foydalaniladigan barcha parametrlarning turlarini belgilash talabi tufayli cheklangan. Masalan, ikkita sonning eng kattasini hisoblash uchun funksiya yozishimiz kerak deylik:
Agar biz butun sonlar bilan ishlasak, hamma narsa yaxshi. Ammo agar biz ikki tomonlama qiymatlar bilan ishlashimiz kerak bo'lsa-chi? Ehtimol, ikki turdagi bilan ishlash uchun max() funksiyasini ortiqcha yuklashga qaror qilasiz:
Endi bizda char, int, double va > operatorini haddan tashqari yuklasak, hatto sinflar bilan ishlaydigan bir xil funktsiyaning ikkita versiyasi mavjud! Biroq, C++ bizdan o'zgaruvchilarning turlarini ko'rsatishni talab qilganligi sababli, biz bir xil funktsiyaning bir nechta versiyasini yozishimiz kerak, bu erda faqat parametrlar turi o'zgaradi. Va bu, o'z navbatida, dasturchilar uchun bosh og'rig'i, chunki bunday kodni saqlash kuch va vaqt jihatidan oson emas. Va eng muhimi, bu samarali dasturlash tushunchalaridan birini buzadi - kodlarning takrorlanishini minimallashtirish. Har qanday turdagi parametrlar bilan ishlaydigan max() funksiyasining bitta versiyasini yozish yaxshi emasmi?
Bu mumkin. Shablonlar dunyosiga xush kelibsiz!
Agar lug‘atdagi “shablon” so‘zining ta’rifiga e’tibor qaratsangiz, biz quyidagilarni ko‘ramiz: “Shablon – shunga o‘xshash mahsulotlar tayyorlanadigan namunadir”. Misol uchun, shablon stencil - chizma / naqsh / belgi kesilgan ob'ekt (masalan, plastinka). Agar biz boshqa ob'ektga trafaret yopishtirib, bo'yoq purkasak, biz minimal kuch bilan bir xil naqshni olamiz, tez va eng muhimi, biz o'nlab bu naqshlarni turli rangda yasay olamiz! Bunday holda, bizga faqat bitta stencil kerak va biz rasmning rangini oldindan aniqlashimiz shart emas (stencilni ishlatishdan oldin).
C++ tilida funksiya shablonlari boshqa shunga o'xshash funksiyalarni yaratish uchun shablon bo'lib xizmat qiladigan funksiyalardir. Asosiy g'oya - ba'zi yoki barcha o'zgaruvchilarning aniq turini (turlarini) ko'rsatmasdan funktsiyalarni yaratish. Buning uchun har qanday ma'lumotlar turi o'rniga qo'llaniladigan shablon parametrining turini ko'rsatuvchi funktsiyani aniqlaymiz. Shablon parametr turiga ega funktsiyani yaratganimizdan so'ng, biz samarali tarzda "funktsiya trafaretini" yaratadi.
Funksiya shablonini chaqirganda, kompilyator funksiya uchun shablon sifatida "trafaret" dan foydalanadi, shablon parametri turini funktsiyaga uzatilgan o'zgaruvchilarning haqiqiy turi bilan almashtiradi! Shunday qilib, biz faqat bitta shablon yordamida funktsiyaning 50 ta "soyasini" yaratishimiz mumkin
Hozircha siz C++ da funksiya shablonlari qanday yaratilganiga qiziqayotgandirsiz. Bu unchalik qiyin emasligi ma'lum bo'ldi. max() funksiyasining butun son versiyasini yana bir bor ko'rib chiqing:
Bu erda biz ma'lumotlar turini uch marta aniqlaymiz: a, b parametrlarida va funktsiyaning qaytish turida. Bu funksiya uchun shablon yaratish uchun int turini funksiya shablon parametri turiga almashtirishimiz kerak. Bu holatda faqat bitta ma'lumot turi (int) ishlatilganligi sababli, biz shablon parametrlarining faqat bitta turini ko'rsatishimiz kerak.
Biz bu turni har qanday nomlashimiz mumkin, agar u zaxiralangan/kalit so'z bo'lmasa. C++ tilida bosh T harfi bilan shablon parametrlari turlariga murojaat qilish odatiy holdir (“Type” so‘zining qisqartmasi).
5. Foydalanilgan adabiyotlar.
1.Умаров, Ш. (2023). Выражение вторичных многочленов спектральными
2.Ziyonet.net web sayti
3.Fayillar.org Veb sayti
|