foydalanish mumkin. Keyin esa, satrli oqimning "haqiqiy qismi"
olinadi va chop
qilinadi.
Iteratorlar ham dinamik strukturaga ega to‘plamdir. Iterator dinamik
maʻlumotlar tuzilmalarini amalga oshirishda juda muhim tushunchadir.
Tushunishimiz uchun, iteratorni maʻlum bir cheklovlar bilan bir ko‘rsatkich sifatida
abstrakt ko‘rinishda aniqlash mumkin. Sirasini aytganda, iterator umumiy tushuncha
bo‘lib va bir ko‘rsatkich uchun obʻyekt to‘plami bo‘ladi, ammo ko‘rsatkich bu
iterator emas. Iterator sinfini quyidagicha qurib olish mumkin:
2.2-dastur. Iteratorning sinfni qurish.
class
Iterator
{
T* pointer;
public
:
T* GetPointer (){
return
this
-> pointer;
}
void
SetPointer (T*
pointer
){
this
-> pointer =
pointer
;
}
};
Iteratorning baʻzi bir formallashtirilgan taʻriflari:
Iteratorlar to‘plam elementlariga kirishni taʻminlaydi. Har bir aniq STL sinfi
uchun iteratorlar to‘plamda sinf ichida alohida aniqlanadi.
Iteratorlarning uch turi mavjud:
-
(forward) iterator
- to‘plamni kichik indeksdan kattaroq indeksga
o‘tkazish uchun;
-
reverse iterator
- to‘plamni katta indeksdan
kichikroq indeksli
o‘tkazish uchun;
-
random access iterator
- to‘plamdan tasofidiy,
har qanday
yo‘nalishda tanlash uchun.
To‘plamning yarim elementlarini o‘chirishga doir misol keltiramiz.
2.3-dastur. To‘plamning yarim elementlarini o‘chirish.
#include
"stdafx.h"
#include
{ t = (*element); }
for
(iterator element = end(); element < begin(); element--)
{ t = (*element); }
Tasodifiy tanlash iteratoridan foydalanganda, masalan, quyidagicha
fragmentni yozish mumkin:
for
(iterator element = begin(); element < end(); element+=2)
{ t = (*element); }
Barcha to‘plamlarda mavjud bo‘lgan asosiy usullar quyidagi 2.1-jadvalga
keltiramiz.
2.1-jadval. To‘plam usullari.
№ nomi
vazifasi
1
empty
To‘plamni bo‘shligini tekshiradi
2
size
To‘plamning o‘lchamini qaytaradi
3
begin
To‘g‘ri iteratorning birinchi elementini ko‘rsatadi
4
end
To‘g‘ri iteratorning oxirgi elementini ko‘rsatadi. Elementi yo‘q
to‘plamga oxirgisidan keyinga o‘tadi
5
rbegin
Teskari iteratorning birinchi elementini ko‘rsatadi
6
rend
Teskari iteratorning oxirgi elementini ko‘rsatadi.
7
clear
To‘plamni tozalash, barcha elementlarini o‘chiradi.
8
erase
Ajratilgan elementlarni to‘plamdan o‘chiradi.
9
capacity
To‘plamning sig‘imini
qaytaradi, yaʻni bu to‘plam uchun
mumkin bo‘lgan elementlar soni (aslida to‘plam uchun qancha
xotira ajratilganini qaytaradi);
To‘plamning sig‘imi (hajmi), boshida aytib o‘tilganidek, kerak bo‘lganda
o‘zgaradi, yaʻni, agar to‘plam uchun ajratilgan barcha xotiralar to‘lgan bo‘lsa, unda
yangi element qo‘shilganda, to‘plamning sig‘imi oshiriladi va o‘sishdan oldin
undagi barcha qiymatlar yangi xotira maydoniga ko‘chiriladi - bu dasturchilar uchun
juda qimmat amal bo‘lib hisoblanadi. Dasturlashda to’plamning
hajmi va quvvati
ishonch hosil qilish muhim dasturlash element hisoblanadi. To‘plamning sig‘imi
turlicha ekanligiga ishonch hosil qilish uchun quyidagi dasturni keltiramiz.
2.4-dastur. To‘plamning sig‘imini tekshirish.
#include
"stdafx.h"
#include
#include
using
namespace
std;
int
main(){
vector
<
int
> vec;
cout <<
"Real size of array in vector: "
<< vec.capacity() << endl;
for
(
int
j = 0; j < 25; j++){
vec.push_back (10);
}
cout <<
"Real size of array in vector: "
<< vec.capacity() << endl;
system(
"pause"
);
return
0;
}
2.3-dastur natijasi. Output
Real size of array in vector: 0
Real size of array in vector: 28
vector
– eng ko‘p ishlatiladigan to‘plam vektor hisoblanadi. Bu to‘plamning
operator[] operatoriga ega ekanligi juda qulay. Odatiy massiv kabi ishlatiladi. Xuddi
shuningdek, bu operator map, deque, string i wstring to‘plamlariga ham mavjud.
Vektorning quvvati dinamik ravishda o‘zgarishini tushunish muhimdir.
Odatda, multiplikativ yondashuv hajmini oshirish uchun ishlatiladi: zarur bo‘lsa,
vektor uchun ajratilgan xotiraning marta soni ortadi, yaʻni, yangi element qo‘shib
to‘plam sig‘imining oshirishga sabab bo‘lsa, operatsion tizimi dasturi uchun yangi
xotira maydoni ajratadi. Masalan, ikki barobar katta bo‘lish uchun, eski xotira
maydoni barcha elementlari nusxasi yangi qiymat qilib qo‘shish.
Do'stlaringiz bilan baham: