55 / 90

C++ Vectors

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.

example.cpp
#include <vector>

C++ vektor deklaratsiyasi

Sarlavha faylini kiritganimizdan so'ng, C++ da vektorni qanday e'lon qilishimiz mumkin:

example.cpp
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,

example.cpp
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++ vektorni ishga tushirish

C++ da vektorni ishga tushirishning turli usullari mavjud.

1-usul:

example.cpp
// Initializer ro' ext
vector<int> vector1 = {1, 2, 3, 4, 5};
example.cpp
// 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:

example.cpp
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

example.cpp
vector<int> vector3 = {12, 12, 12, 12, 12};

Misol: C++ vektorni ishga tushirish

example.cpp
#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

kod
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.

Asosiy vektor operatsiyalari

vector klassi vektorlarda turli operatsiyalarni bajarish uchun turli usullarni taqdim etadi. Biz ushbu qo'llanmada bir nechta vektor operatsiyalarini ko'rib chiqamiz:

  • Elementlarni qo'shish
  • Elementlarga kirish
  • Elementlarni o'zgartirish
  • Elementlarni olib tashlang

1. Vektorga elementlar qo'shish

Vektorga bitta element qo'shish uchun biz push_back() funksiyasidan foydalanamiz. U vektorning oxiriga element kiritadi. Masalan,

example.cpp
#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

kod
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

example.cpp
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() va emplace() funksiyalaridan ham foydalanishimiz mumkin.

2. Vektor elementlariga kirish

C++ da biz vektor elementlariga kirish uchun indeks raqamidan foydalanamiz. Bu erda biz belgilangan indeksdagi elementga kirish uchun at() funksiyasidan foydalanamiz. Masalan,

example.cpp
#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

kod
Element at Index 0: 1
Element at Index 2: 3
Element at Index 4: 5

Bu yerga,

  • num.at(0) - access element at index 0
  • num.at(2) - access element at index 2
  • num.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: 2 Biroq, at() funksiyasi [] dan ko'ra afzalroqdir, chunki at() 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);

3. Vektor elementini o'zgartirish

Xuddi shu at() funksiyasidan foydalanib vektor elementini o'zgartirishimiz mumkin. Masalan,

example.cpp
#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

kod
Initial Vector: 1  2  3  4  5  
Updated Vector: 1  9  3  4  7

Yuqoridagi misolda, operatorlarga e'tibor bering,

example.cpp
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.

4. C++ vektorlaridan elementlarni o‘chirish

Vektordan bitta elementni o'chirish uchun biz pop_back() funksiyasidan foydalanamiz. Masalan,

example.cpp
#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

kod
Initial Vector: 2 3 5 7 
Updated Vector: 2 3 5

Yuqoridagi misolda, operatorga e'tibor bering,

example.cpp
prime_numbers.pop_back();

Bu erda biz vektordan oxirgi elementni (7) olib tashladik.

C++ vektor funksiyalari

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

C++ vektor iteratorlari

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

example.cpp
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:

example.cpp
// int vektor uchun iterator
vector<int>::iterator iter1;

// ikki vektor uchun iterator
vector<double>::iterator iter2;

Vektorli iteratorlarni ishga tushiring

begin() va end() funksiyalari yordamida vektor iteratorlarini ishga tushirishimiz mumkin.

  1. start() funksiyasi

begin() funksiyasi vektorning birinchi elementiga ishora qiluvchi iteratorni qaytaradi. Masalan,

example.cpp
vector<int> num = {1, 2, 3};
vector<int>::iterator iter;

// iter songa ishora qiladi[0]
iter = num.begin();
  1. end() funksiyasi

end() funksiyasi vektorning yakuniy elementidan keyin keladigan nazariy elementga ishora qiladi. Masalan,

example.cpp
// 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.

Misol: C++ vektor iteratorlari

example.cpp
#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

kod
num[0] = 1
num[2] = 3
num[4] = 5

Ushbu dasturda biz int vektorli iterator iterini vektor raqami bilan ishlatish uchun e'lon qildik.

example.cpp
// iterator deb e'lon qiling
vector<int>::iterator iter;

Keyin, begin() funksiyasidan foydalanib, iteratorni vektorning birinchi elementiga ishga tushirdik.

example.cpp
// iteratorni birinchi element bilan ishga tushiring
iter = num.begin();

Keyin, iteratorga murojaat qilishdan voz kechib, vektor elementini chop etdik:

example.cpp
// 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.

Misol: Iteratorlar yordamida vektor orqali takrorlash

example.cpp
#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

kod
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.

example.cpp
// for loop bilan iteratordan belgilash
for (iter = num.begin(); iter != num.end(); ++iter) {
  cout << *iter << "  ";
}

Shuningdek o'qing: