size() funksiyasi turi unsigned (int emas) bo`lgan vektor o`lchamini qaytaradi. Ba’zi kompilyatorlar i o`zgaruvchida ishorasiz qiymat o`rniga ishorali qiymat ishlatilganligi haqida ogohlantirishi mumkin (16-, 29-, 40-qatorlar). Bu shunchaki ogohlantirish va bunda hech qanday muammo sodir bo`lmaydi, chunki ishorasiz qiymat avtomatik tarzda ishorali qiymatga ko`chiriladi.
Ogohlantirishning oldini olish uchun, 16-qatorda, i o`zgaruvchini unsigned int sifatida, quyidagicha ko`rinishda e’lon qilinishi kerak:
for (unsigned i = 0; i < intVector.size(); i++)
7.3. vector sinfidan foydalanib massivlarni almashtirish Key Point. Vektordan massivlarni almashtirishda foydalanish mumkin. Vektorlar massivlarga nisbatan ko`proq qayishuvchan, biroq, massivlar vektorlarga qaraganda samaraliroqdir. vector ob’yekt xuddi massivdek ishlatilishi mumkin, ammo ba’zi farqlar mavjud. 7.1-jadvalda ularning o`xshash va farqli jixatlari keltirilgan.
7.1-jadval. Massivlar va vector o`rtasidagi o`xshashliklar va farqli jixatlar.
Amallar
Massiv
Vector
Massiv/vektorni yaratish
string a[10]
vector v
Elementga murojaat
a[index]
v[index]
Elementga qiymat berish
a[index] = "London"
v[index] = "London"
Hajmni qaytarish
v.size()
Yangi element qo`shish
v.push_back("London")
Elementni o`chirish
v.pop_back()
Barcha elementlarni o`chirish
v.clear()
Vektorlar va massivlarning har ikkalasi ham elementlar ro`yxatini yozish uchun ishlatiladi. Agar ro`yxat hajmi o`zgarmas bo`lsa, massivdan foydalanish samaraliroq. Vektor esa, hajmi o`zgaruvchan massivdir. vector sinfi vektorga murojaat qilish va unga ishlov berishga mo`ljallangan ko`plab a’zo funksiyalarga ega. Massivlarga nisbatan vektorlarni ishlatish ko`proq qayta sozlash imkoniyatlarini beradi. Umuman olganda, massivlarni almashtirish uchun har doim vektorlardan foydalanishimiz mumkin. Bundan keyingi barcha ma’ruzalarda vektorlar yordamida qayta ishlov berish mumkin bo`lgan massivlardan foydalanishga oid misollar beriladi.
O`tgan semestrda o`rganganimiz – ikki o`lchovni massivga yuborish masalasiga oid dastur kodini qarab chiqamiz.
7.3-kodli ro`yxat. KartaDastasi.cpp 1 #include 2 #include 3 #include 4 using namespace std;
5
6 int main()
7 {
8 const int KARTALAR_SONI = 52;
9 int dasta[KARTALAR_SONI];
10 string moslik[] = {"Qarg`a", "Tappon", "G`isht", "Chillak"};
11 string raqamlar[] = {"Tuz","2","3","4","5","6","7","8","9",
12 "10","Valet","Dama","Qirol"};
13
14 // Boshlang`ich kartalar 15 for (int i = 0; i < KARTALAR_SONI; i++)
16 dasta[i] = i;
17
18 // Kartalarni aralashtirish 19 srand(time(0));
20 for(int i = 0; i < KARTALAR_SONI; i++)
21 {
22 // Tasodifiy indeksni generatsiyalash 23 int index = rand() % KARTALAR_SONI;
24 int temp = dasta[i];
25 dasta[i] = dasta[index];
26 dasta[index] = temp;
27 }
28
29 // Birinchi to`rtta kartani ko`rsatish 30 for (int i = 0; i < 4; i++)
31 {
32 string mos_kelish = moslik[dasta[i] / 13];
33 string raqam = raqamlar[dasta[i] % 13];
34 cout << dasta[i] <<" – karta: " << mos_kelish
35 << ", karta raqami: "<< raqam << endl;
36 }
37
38 return 0;
39 }
6 - karta: Qarg`a, karta raqami: 7
48 - karta: Chillak, karta raqami: 10
11 - karta: Qarg`a, karta raqami: Dama
24 - karta: Tappon, karta raqami: Dama
Dastur 52 ta karta uchun dasta massivini aniqlaydi (9-qator). 15-16-qatorlarda dasta massiviga 0 dan 51 gacha bo`lgan qiymatlar yuklanadi. dasta ning 0 qiymati tuz qarg`ani beradi, 1 qiymati 2 qarg`ani beradi, 13 qiymati tuz tapponni, 14 esa, 2 tapponni taqdim etadi. 20-27-qatorlarda dasta tasodifiy aralashtiriladi. Dasta tasodifiy aralashtirilganidan so`ng, dasta[i] turli qiymatlarga ega bo`lib qoladi. dasta[i] / 13 bu yerda 0 dan 12 gacha bo`lgan oraliqdagi dasta[i] % 13 mos karta raqamini hisoblovchi 0, 1, 2, 3 sonlaridir.
Endi bu dasturni vektordan foydalangan holda, qayta ko`rib chiqamiz. 52 ta kartani 0 dan 51 gacha qiymatlar bilan yuklovchi quyidagicha kodli o`zgartirish kiritamiz: