Stl (Standard Template Library) kutubxonalari bilan tanishib, uning


string — to‘plam, ASCII formatidagi bir baytli belgilar to‘plami;  wstring


Download 0.79 Mb.
Pdf ko'rish
bet4/11
Sana06.05.2023
Hajmi0.79 Mb.
#1435570
1   2   3   4   5   6   7   8   9   10   11
Bog'liq
2-Ma\'ruza matni

string — to‘plam, ASCII formatidagi bir baytli belgilar to‘plami; 
wstring — to‘plam, Unicode formatidagi ikki baytli belgilar to‘plami; 
Dasturga ulanish uslubi: 
#include
 
#include

Shuningdek, belgilar to‘plami bo‘lgan, satrli oqimlarni ham to‘plam sifatida 
qarash mumkin. strstream-oddiy maʻlumotlar tiplarini STL-string ko‘rinishada 
saqlashni tashkil qilish uchun ishlatiladi. Dasturga ulanish uslubi: 
#include

Dasturlarni tahlil qilishni shu sinfdan boshlaymiz. 
2.1-dastur. Satrli oqim to‘plam sifatida ishlatish 
#include
"stdafx.h"
#include

#include

#include

using
namespace
std; 


int
main(){
strstream
xstr;
for
(
int
i = 0; i < 10; i++)
{
xstr << 
"Demo "
<< i << endl;
}
cout << xstr.str() << endl;
string
str;
str.assign(xstr.str (), xstr.pcount());
cout << str.c_str() << endl; 
system(
"pause"
); 
return
0;
}
2.1-dastur natijasi. Output 
Demo 0 
Demo 1 
Demo 2 
Demo 3 
Demo 4 
Demo 5 
Demo 6 
Demo 7 
Demo 8 
Demo 9 
══════════════════════════¤¤¤¤llllllllyu■yu■ 
Demo 0 
Demo 1 
Demo 2 
Demo 3 
Demo 4 
Demo 5 
Demo 6 
Demo 7 
Demo 8 
Demo 9
Satrli oqim - oqim oxirida bir null terminator bilan tugaydigan buferdir.
Shuning uchun uning bo‘sh qolgan elemetlari ixtiyoriy belgi bilan to‘ldiriladi. Satrli 
oqimning haqiqiy qismini olish uchun pcount() elementlarni sanagichidan 


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



#include

#include

using
namespace
std; 
void
printInt (
int
number); 
int
main (){ 
vector
<
int
> myVec; 
vector
<
int
>::
iterator
first, last; 
for
(
long
i=0; i<10; i++){ 
myVec.push_back(i); 

first = myVec.begin(); 
last = myVec.begin() + 5; 
if
(last >= myVec.end()){ 
return
- 1; 

myVec.erase(first, last); 
for_each (myVec.begin(), myVec.end(), printInt); 
system(
"pause"
); 
return
0; 

void
printInt (
int
number


cout << 
number
<< endl; 
}
2.3-dastur natijasi. Output 




9
2.3-dasturdagi baʻzi funksiyalarni keyinroq tushuntirib o‘tamiz. Shuni ham 
tushunish kerakki, to‘plamning qandaydir elementi uchun iterator olishda to‘plamni 
ketma-ket o‘zgartirish iteratorni yaroqsiz holga keltirish mumkin. 
Iteratorning iteratsiyasida oldinga va shunga o‘xshash orqaga o‘tish 
quyidagicha fragmenti asosida sodir bo‘ladi: 
for
(iterator element = begin(); element < end(); element++)


{ 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 

empty 
To‘plamni bo‘shligini tekshiradi 

size 
To‘plamning o‘lchamini qaytaradi 

begin 
To‘g‘ri iteratorning birinchi elementini ko‘rsatadi 

end 
To‘g‘ri iteratorning oxirgi elementini ko‘rsatadi. Elementi yo‘q 
to‘plamga oxirgisidan keyinga o‘tadi 

rbegin 
Teskari iteratorning birinchi elementini ko‘rsatadi 

rend 
Teskari iteratorning oxirgi elementini ko‘rsatadi.

clear 
To‘plamni tozalash, barcha elementlarini o‘chiradi. 

erase 
Ajratilgan elementlarni to‘plamdan o‘chiradi. 

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. 

Download 0.79 Mb.

Do'stlaringiz bilan baham:
1   2   3   4   5   6   7   8   9   10   11




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