C++ vektorlari (std::vector)
C++ da vektorlar o'xshash ma'lumotlar turlarining elementlarini saqlash uchun ishlatiladi. Biroq, arrays dan farqli o'laroq, vektor hajmi dinamik ravishda o'sishi mumkin.
Ya'ni, dasturni bajarish vaqtida vektor hajmini o'z talablarimizga muvofiq o'zgartirishimiz mumkin.
Vektorlar C++ Standard Template Library ning bir qismidir. Vektorlardan foydalanish uchun dasturimizga vector sarlavha faylini kiritishimiz kerak.
#include <vector>
Sarlavha faylini kiritganimizdan so'ng, C++ da vektorni qanday e'lon qilishimiz mumkin:
std::vector<T> vector_name;
<T> turi parametri vektor turini belgilaydi. Bu int , char , float va boshqalar kabi har qanday ibtidoiy ma'lumotlar turi bo'lishi mumkin. Masalan,
vector<int> num;
Bu yerda num vektorning nomi.
E'tibor bering, biz deklaratsiya paytida vektorning o'lchamini ko'rsatmadik. Buning sababi shundaki, vektorning o'lchami dinamik ravishda o'sishi mumkin, shuning uchun uni aniqlash shart emas.
C++ da vektorni ishga tushirishning turli usullari mavjud.
1-usul:
// Initializer ro' ext
vector<int> vector1 = {1, 2, 3, 4, 5};
// Yagona ishga tushirish
vector<int> vector2 {1, 2, 3, 4, 5};
Bu erda biz vektorni to'g'ridan-to'g'ri vektorga qiymat berish orqali ishga tushiramiz. Endi vector1 ham, vector2 ham 1, 2, 3, 4, 5 qiymatlari bilan ishga tushirilgan.
2-usul:
vector<int> vector3(5, 12);
Bu erda 5 - vektorning o'lchami va 12 - qiymat.
Ushbu kod 5 o'lchamli int vektorini yaratadi va vektorni 12 qiymati bilan ishga tushiradi. Demak, vektor ga ekvivalentdir
vector<int> vector3 = {12, 12, 12, 12, 12};
#include <iostream>
#include <vector>
using namespace std;
int main() {
// ishga tushirish ro'yxati
vector<int> vector1 = {1, 2, 3, 4, 5};
// yagona ishga tushirish
vector<int> vector2{6, 7, 8, 9, 10};
// usul 3
vector<int> vector3(5, 12);
cout << "vector1 = ";
// range-based sikl
for (const int& i : vector1) {
cout << i << " ";
}
cout << "\nvector2 = ";
// range-based sikl
for (const int& i : vector2) {
cout << i << " ";
}
cout << "\nvector3 = ";
// range-based sikl
for (int i : vector3) {
cout << i << " ";
}
return 0;
}
Chiqish
vector1 = 1 2 3 4 5
vector2 = 6 7 8 9 10
vector3 = 12 12 12 12 12
Bu erda biz uchta turli initsializatsiya usullaridan foydalangan holda uchta turli vektorni e'lon qildik va ishga tushirdik va ularning mazmunini ko'rsatdik.
vector klassi vektorlarda turli operatsiyalarni bajarish uchun turli usullarni taqdim etadi. Biz ushbu qo'llanmada bir nechta vektor operatsiyalarini ko'rib chiqamiz:
Vektorga bitta element qo'shish uchun biz push_back() funksiyasidan foydalanamiz. U vektorning oxiriga element kiritadi. Masalan,
#include <iostream>
#include <vector>
using namespace std;
int main() {
vector<int> num {1, 2, 3, 4, 5};
cout << "Initial Vector: ";
for (const int& i : num) {
cout << i << " ";
}
// vektorga 6 va 7 butun sonlarni qo'shing
num.push_back(6);
num.push_back(7);
cout << "\nUpdated Vector: ";
for (const int& i : num) {
cout << i << " ";
}
return 0;
}
Chiqish
Initial Vector: 1 2 3 4 5
Updated Vector: 1 2 3 4 5 6 7
Bu erda biz int vektor raqamini {1, 2, 3, 4, 5} elementlari bilan ishga tushirdik. Operatorlarga e'tibor bering
num.push_back(6);
num.push_back(7);
Bu erda push_back() funksiyasi vektorga 6 va 7 elementlarini qo'shadi.
[!NOTE] Vektorga elementlar qo'shish uchun
insert()vaemplace()funksiyalaridan ham foydalanishimiz mumkin.
C++ da biz vektor elementlariga kirish uchun indeks raqamidan foydalanamiz. Bu erda biz belgilangan indeksdagi elementga kirish uchun at() funksiyasidan foydalanamiz. Masalan,
#include <iostream>
#include <vector>
using namespace std;
int main() {
vector<int> num {1, 2, 3, 4, 5};
cout << "Element at Index 0: " << num.at(0) << endl;
cout << "Element at Index 2: " << num.at(2) << endl;
cout << "Element at Index 4: " << num.at(4);
return 0;
}
Chiqish
Element at Index 0: 1
Element at Index 2: 3
Element at Index 4: 5
Bu yerga,
num.at(0) - access element at index 0num.at(2) - access element at index 2num.at(4) - access element at index 4[!NOTE] Massiv singari, vektor elementlariga kirish uchun
[]kvadrat qavslardan ham foydalanishimiz mumkin. Misol uchun,vector<int> num {1, 2, 3}; cout << num[1]; // Output: 2Biroq,at()funksiyasi[]dan ko'ra afzalroqdir, chunkiat()vektor chegaradan tashqarida bo'lganda istisno qiladi,[]esa axlat qiymatini beradi.vector<int> num {1, 2, 3}; // gives garbage value cout << num[4]; // throws an exception cout << num.at(4);
Xuddi shu at() funksiyasidan foydalanib vektor elementini o'zgartirishimiz mumkin. Masalan,
#include <iostream>
#include <vector>
using namespace std;
int main() {
vector<int> num {1, 2, 3, 4, 5};
cout << "Initial Vector: ";
for (const int& i : num) {
cout << i << " ";
}
// 1 va 4 indekslardagi elementlarni o'zgartirish
num.at(1) = 9;
num.at(4) = 7;
cout << "\nUpdated Vector: ";
for (const int& i : num) {
cout << i << " ";
}
return 0;
}
Chiqish
Initial Vector: 1 2 3 4 5
Updated Vector: 1 9 3 4 7
Yuqoridagi misolda, operatorlarga e'tibor bering,
num.at(1) = 9;
num.at(4) = 7;
Bu yerda biz 1 va 4 indekslarga yangi qiymatlar berdik. Shunday qilib, 1 indeksdagi qiymat 9 ga, 4 indeksdagi qiymat esa 7 ga o'zgartiriladi.
Vektordan bitta elementni o'chirish uchun biz pop_back() funksiyasidan foydalanamiz. Masalan,
#include <iostream>
#include <vector>
using namespace std;
int main() {
vector<int> prime_numbers{2, 3, 5, 7};
// boshlang'ich vektor
cout << "Initial Vector: ";
for (int i : prime_numbers) {
cout << i << " ";
}
// oxirgi elementni olib tashlang
prime_numbers.pop_back();
// yakuniy vektor
cout << "\nUpdated Vector: ";
for (int i : prime_numbers) {
cout << i << " ";
}
return 0;
}
Chiqish
Initial Vector: 2 3 5 7
Updated Vector: 2 3 5
Yuqoridagi misolda, operatorga e'tibor bering,
prime_numbers.pop_back();
Bu erda biz vektordan oxirgi elementni (7) olib tashladik.
C++ da vektor sarlavhasi fayli vektor ustida turli amallarni bajarish uchun ishlatilishi mumkin bo'lgan turli funksiyalarni ta'minlaydi.
Funksiya tavsifi size() vektorda mavjud elementlar sonini qaytaradi clear() vektorning barcha elementlarini olib tashlaydi front() vektorning birinchi elementini qaytaradi back() vektorning oxirgi elementini qaytaradi empty() vektor bo‘sh bo‘lsa, 1 (to‘g‘ri) ni qaytaradi capacity() vektorning umumiy hajmini tekshiring
Vektor iterators vektor elementning xotira manziliga ishora qilish uchun ishlatiladi. Qaysidir ma'noda ular C++ da pointers kabi ishlaydi.
Biz sintaksis bilan vektor iteratorlarini yaratishimiz mumkin
vector<T>::iterator iteratorName;
Misol uchun, agar bizda int va double turdagi 2 vektor mavjud bo'lsa, unda ularning turlariga mos keladigan 2 xil iterator kerak bo'ladi:
// int vektor uchun iterator
vector<int>::iterator iter1;
// ikki vektor uchun iterator
vector<double>::iterator iter2;
begin() va end() funksiyalari yordamida vektor iteratorlarini ishga tushirishimiz mumkin.
begin() funksiyasi vektorning birinchi elementiga ishora qiluvchi iteratorni qaytaradi. Masalan,
vector<int> num = {1, 2, 3};
vector<int>::iterator iter;
// iter songa ishora qiladi[0]
iter = num.begin();
end() funksiyasi vektorning yakuniy elementidan keyin keladigan nazariy elementga ishora qiladi. Masalan,
// iter numning oxirgi elementiga ishora qiladi
iter = num.end() - 1;
Bu erda end() funksiyasining tabiati tufayli biz num.end() - 1 kodidan son vektorining oxirgi elementiga, ya'ni num[2] ga ishora qilish uchun foydalandik.
#include <iostream>
#include <vector>
using namespace std;
int main() {
vector<int> num {1, 2, 3, 4, 5};
// iterator deb e'lon qiling
vector<int>::iterator iter;
// iteratorni birinchi element bilan ishga tushiring
iter = num.begin();
// vektor elementini chop eting
cout << "num[0] = " << *iter << endl;
// iterator uchinchi elementga ishora qiladi
iter = num.begin() + 2;
cout << "num[2] = " << *iter;
// iterator oxirgi elementga ishora qiladi
iter = num.end() - 1;
cout << "num[4] = " << *iter;
return 0;
}
Chiqish
num[0] = 1
num[2] = 3
num[4] = 5
Ushbu dasturda biz int vektorli iterator iterini vektor raqami bilan ishlatish uchun e'lon qildik.
// iterator deb e'lon qiling
vector<int>::iterator iter;
Keyin, begin() funksiyasidan foydalanib, iteratorni vektorning birinchi elementiga ishga tushirdik.
// iteratorni birinchi element bilan ishga tushiring
iter = num.begin();
Keyin, iteratorga murojaat qilishdan voz kechib, vektor elementini chop etdik:
// vektor elementini chop eting
cout << "num[0] = " << *iter << endl;
Keyin, iter qiymatini num.begin() + 2 ga o'zgartirib, vektorning 3-elementini chop etdik.
Nihoyat, end() funksiyasidan foydalanib vektorning oxirgi elementini chop etdik.
#include <iostream>
#include <vector>
using namespace std;
int main() {
vector<int> num {1, 2, 3, 4, 5};
// iterator deb e'lon qiling
vector<int>::iterator iter;
// for loop bilan iteratordan belgilash
for (iter = num.begin(); iter != num.end(); ++iter) {
cout << *iter << " ";
}
return 0;
}
Chiqish
1 2 3 4 5
Bu yerda biz begin() va end() funksiyalaridan foydalangan holda vektor boshidan vektor oxirigacha iterator iterini ishga tushirish va takrorlash uchun for loop dan foydalandik.
// for loop bilan iteratordan belgilash
for (iter = num.begin(); iter != num.end(); ++iter) {
cout << *iter << " ";
}
Shuningdek o'qing: