* operatori iterator hozir ishora qilayotgan elementni qaytaradi



Download 20,87 Kb.
Sana26.04.2022
Hajmi20,87 Kb.
#584414
Bog'liq
Iterator STL


Iterator STL. Iterator - bu foydalanuvchi ma'lum bir konteyner sinfini amalga oshirishni bilishi kerak bo'lmasdan, konteyner sinfining elementlarini takrorlash qobiliyatiga ega obyekt. Ko'pgina konteynerlarda (ayniqsa, ro'yxat va assotsiativ konteynerlar) iteratorlar ushbu konteynerlarning elementlariga kirishning asosiy usuli hisoblanadi.
Iteratorlarning funksionalligi. Iteratorni aniq belgilangan funktsiyalarni bajarish uchun qayta yuklangan operatorlarning qo'shimcha to'plamiga ega konteyner sinfining ma'lum bir elementiga ko'rsatgich sifatida qarash mumkin:



  • * operatori iterator hozir ishora qilayotgan elementni qaytaradi.

  • ++ operatori iteratorni konteynerdagi keyingi elementga o'tkazadi. Aksariyat iteratorlar oldingi elementga o'tish uchun - operatorini ham ta'minlaydi.

  • == va != operatorlari ikkala iterator bir xil elementga ishora qiladimi yoki yo'qligini aniqlash uchun ishlatiladi. Ikkala iterator tomonidan ko'rsatilgan qiymatlarni solishtirish uchun avval ushbu iteratorlarga murojaat qilishingiz kerak va keyin == operatoridan yoki != operatoridan foydalaning.

  • = operatori iteratorga yangi pozitsiyani belgilaydi (odatda konteynerning boshlang'ich yoki tugatish elementi). Iterator tomonidan ko'rsatilgan elementning qiymatini boshqa obyektga belgilash uchun siz birinchi navbatda iteratordan voz kechishingiz va keyin = operatoridan foydalanishingiz kerak.

Har bir konteyner sinfida = operatori bilan ishlashning 4 ta asosiy usuli mavjud:





  • begin() metodi konteynerning boshlang'ich elementini ifodalovchi iteratorni qaytaradi;

  • end() metodi konteynerdagi oxirgi elementdan keyin elementni ifodalovchi iteratorni qaytaradi;

  • cbegin() metodi konteynerning boshlang'ich elementini ifodalovchi doimiy (faqat o'qish uchun) iteratorni qaytaradi;




  • cend() metodi konteynerdagi oxirgi elementdan keyin elementni ifodalovchi doimiy (faqat o'qish uchun) iteratorni qaytaradi.

end() metodi konteynerning oxirgi elementini ko'rsatmasligi g'alati tuyulishi mumkin, ammo bu sikllardan foydalanishni soddalashtirish uchun amalga oshiriladi.


Va nihoyat, barcha konteynerlar (kamida) ikki turdagi iteratorlarni taqdim etadi:



  • container::iterator - o'qish / yozish iteratori;

  • container::const_iterator faqat o'qish uchun iterator.

Keling, iteratorlardan foydalanishning ba'zi misollarini ko'rib chiqaylik.


Vektorlar bo’yicha iteratsiya. Vektorni 5 ta raqam bilan to'ldiring va vektor qiymatlarini ko'rsatish uchun iteratorlardan foydalaning:


#include


#include
int main()
{
vector myVector;
for (int count=0; count < 5; ++count)
myVector.push_back(count);
vector::const_iterator it; //faqat o'qish uchun iterator e'lon qilish
it = myVector.begin(); // vektorning boshlang'ich elementini unga tayinlash
while (it != myVector.end()) // iterator oxirgi elementga yetguncha
{
cout << *it << " "; // iterator tomonidan ko'rsatilgan elementning qiymatini chop etish
++it; // va keyingi elementga o'tish
}
cout << '\n';
}

Dastur natijasi: 0 1 2 3 4


Ro’yxat bo’yicha iteratsiya. Yuqoridagi kabi vazifalarni bajaraylik. Lekin ro'yxat bilan:


#include


#include
int main()
{
list myList;
for (int count=0; count < 5; ++count)
myList.push_back(count);
list::const_iterator it; //iteratorni e'lon qilish
it = myList.begin(); // unga ro'yxatning boshlang'ich elementini tayinlang
while (it != myList.end()) // iterator oxirgi elementga yetguncha
{
cout << *it << " "; // iterator tomonidan ko'rsatilgan elementning qiymatini chop etish
++it; // va keyingi elementga o'tish
}
cout << '\n';
}
Dastur natijasi: 0 1 2 3 4

E'tibor bering, ushbu dasturning kodi oldingi misol bilan deyarli bir xil, ammo vektorlar va ro'yxatlarni realizatsiya qilish bir-biridan sezilarli darajada farq qiladi!


set-y bo’yicha iteratsiya. Quyidagi dasturda biz 5 ta raqamdan iborat set ni yaratamiz va bu qiymatlarni chiqarish uchun iteratordan foydalanamiz:

#include


#include
using namespace std;
int main()
{
set mySet;
mySet.insert(8);
mySet.insert(3);
mySet.insert(-4);
mySet.insert(9);
mySet.insert(2);
set::const_iterator it; // iteratorni e'lon qilish
it = mySet.begin(); // setning boshlang'ich elementini tayinlash
while (it != mySet.end()) // iterator oxirgi elementga yetguncha
{
cout << *it << " "; // iterator tomonidan ko'rsatilgan elementning qiymatini chop etish
++it; // keyingi elementga o'tish
}
cout << '\n';
}

Dasturni bajarish natijasi:


-4 2 3 8 9


E'tibor bering, setni elementlar bilan to'ldirish vektor va yuqoridagi ro'yxatni to'ldirish usulidan farq qilsa-da, set elementlarini takrorlash uchun ishlatiladigan kod bir xil.


Assotsiativ massiv bo’yicha iteratsiya. Bu misol biroz murakkabroq. map va multimap konteynerlari juft elementlarni qabul qiladi (pair sifatida aniqlanadi). Juftliklar yaratish uchun make_pair () yordamchi funksiyasidan foydalanamiz. pair birinchi va ikkinchi a'zolar orqali elementga (kalit-qiymat juftligi) kirish imkonini beradi. Assotsiativ massivimizda biz birinchi a'zoni "kalit" sifatida, ikkinchisini esa "qiymat" sifatida ishlatamiz:


#include
#include
#include
int main()
{
std::map myMap;
myMap.insert(std::make_pair(3, "cat"));
myMap.insert(std::make_pair(2, "dog"));
myMap.insert(std::make_pair(5, "chicken"));
myMap.insert(std::make_pair(4, "lion"));
myMap.insert(std::make_pair(1, "spider"));
std::map::const_iterator it; // iteratorni e'lon qilish
it = myMap.begin(); // birinchi elementni tayinlash
while (it != myMap.end()) // iterator oxirgi elementga yetguncha
{
std::cout << it->first << "=" << it->second << " "; // iterator tomonidan ko'rsatilgan elementning qiymatini chop etish
++it; // va keyingi elementga o'tish
}
std::cout << '\n';
}

Dasturni bajarish natijasi:


1 = spider 2 = dog 3 = cat 4 = lion 5 = chicken


Iteratorlar yordamida konteyner elementlarini takrorlash qanchalik osonligiga e'tibor bering. Assotsiativ massiv o'z ma'lumotlarini qanday saqlashi haqida tashvishlanishingiz shart emas!


Xulosa. Iteratorlar konteyner sinfining elementlarini ma'lum bir konteyner sinfini amalga oshirishni bilmasdan takrorlashning oson usulini ta'minlaydi. STL algoritmlari va konteyner klassi usullari bilan birgalikda iteratorlar yanada kuchliroq bo'ladi.
Yana bir narsani e'tiborga olish kerak: iteratorlar har bir konteyner uchun alohida amalga oshirilishi kerak, chunki iterator konteyner sinfini amalga oshirishni bilishi kerak. Shunday qilib, iteratorlar har doim ma'lum konteyner sinflari bilan bog'langan.

Download 20,87 Kb.

Do'stlaringiz bilan baham:




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