Mavzu: Funktorlarning qoʼllanilishi


Download 217.56 Kb.
Sana19.06.2023
Hajmi217.56 Kb.
#1607022
Bog'liq
Funktorlarning qoʼllanilishi;


Mavzu: Funktorlarning qoʼllanilishi
Funktor - bu funktsiya kabi "chaqirilishi" mumkin bo'lgan sinf yoki tarkibiy ob'ekt. Bu yuklanish orqali amalga oshiriladi. () operator ko'plab qiymatlar olishi mumkin. Boshqa operatorlar faqat ikkitasini oladi, ya'ni + operator faqat ikkita qiymatni olishi mumkin (operatorning har ikki tomonida bittadan) va ortiqcha yuklagan qiymatni qaytaradi. () operatorning ichiga moslashuvchanlikni beradigan har qanday argumentlarni kiritish mumkin.
Funktsiyani yaratish uchun avval sinf yaratiladi. Keyin tur va ism bo'yicha parametr bilan sinfga konstruktor yaratiladi. Buning ortidan sinf a'zosi ob'ektlarini konstruktorga oldindan e'lon qilingan parametr bilan quradigan initsializatorlar ro'yxati e’lon qilinadi. Keyin () operator yuklanadi. Nihoyat yaratilgan sinf yoki tuzilmaning xususiy ob'ektlari e'lon qilinadi:
class myFunctor
{
public:
/* myFunctor is the constructor. parameterVar is the parameter passed to
the constructor. : is the initializer list operator. myObject is the
private member object of the myFunctor class. parameterVar is passed
to the () operator which takes it and adds it to myObject in the
overloaded () operator function. */
myFunctor (int parameterVar) : myObject( parameterVar ) {}
/* the "operator" word is a keyword which indicates this function is an
overloaded operator function. The () following this just tells the
compiler that () is the operator being overloaded. Following that is
the parameter for the overloaded operator. This parameter is actually
the argument "parameterVar" passed by the constructor we just wrote.
The last part of this statement is the overloaded operators body
which adds the parameter passed to the member object. */
int operator() (int myArgument) { return myObject + myArgument; }
private:
int myObject; //Our private member object.
};
Standart shablon sinflar bibliotekasi.
Biblioteka yadrosi uchta elementdan iborat: konteynerlar, algoritmlar va iteratorlar. Konteynerlar (containers) – bu boshqa elementlarni saqlovchi obyektlar.
Masalan, vektor, chiziqli ro‘yxat, to‘plam. Assotsiativ konteynerlar (associative containers) kalitlar yordamida ularda saqlanadigan qiymatlarni tezkor olish imkonini yaratadi. Har bir sinf – konteynerida ular bilan ishlash uchun mo‘ljallangan funksiyalar to‘plami aniqlangan. Masalan, ruyxat elementlarni kiritish, chiqarish, va qo‘shish funksiyalarni o‘z ichiga oladi. Algoritmlar (algorithms) konteyner ichidagilar ustidan operatsiyalar bajaradi. Konteyner ichidagilarni initsializatsiyalash, qidirish, saralash va almashtirish uchun algoritmlar mavjud. Ko‘p algoritmlar konteyner ichidagi elementlarni chiziqi ro‘yxatini ifodalaydovchi ketma-ketlik (sequence) bilan ishlash uchun mo‘ljallangan. Iteratorlar (iterators) – bu konteynerga nisbatan ko‘rsatkich sifatida bo‘lgan obyektlar. Ular massiv elementlariga ruxsat oluvchi ko‘rsatkichlar kabi, konteyner ichidagiga ruxsat olish imkoni beradi.
vector dinamk massiv
list chiziqli ro‘yxat
deque ikki tarafli tartib
set to‘plam
multiset har bir elementi noyob bo‘lishi shart emas to‘plam
map kalit/ qiymat juftlikni saqlash uchun assotsiativ ro‘yxat
Bunda har bir kalit bitta qiymat bilan bog‘langan.
Multimap har bir kalit bilan ikkita yoki ko‘proq qiymatlar
bog‘langan
stack stek
queue tartib
priority_queue birinchi o‘rindagi tartib
Ixtiyoriy sinf-konteyner ko‘rsatilmagan holda konstruktor va destruktorni nusxalovchi konstruktorga ega. Ixtiyoriy obyekt uchun ko‘rsatilmagan holda konteynerda saqlanuvchi konstruktor mavjud bo‘lishi shart. Undan tashqari, obyekt uchun < va == operatorlar aniqlanish lozim.
Iteratorlar bilan ko‘rsatkichlar kabi ishlash mumkin. Ularga *, inkrement, dekrement operatorlarni qo‘llash mumkin. Iterator tipi sifatida har xil konteynerlarda aniqlangan iterator tip elon qilinadi.
Iteratorlardan foydalanib list konteyneri ustida amallar bajaring
#include
#include
#include
#include
#include
using namespace std;
int main()
{
int n,x;
cout << "Listning o'lchamini kiriting: ";
cin >> n;
list bol;
for (int i = 0; i < n; i++){
x = rand() % 11 - 5;
bol.push_back(x);
cout << i + 1 << " - " << x<}
for (int y : bol){ cout << y << endl; }
system("pause");
return 0;
}

Download 217.56 Kb.

Do'stlaringiz bilan baham:




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