C++ Standart shablon kutubxonasi (STL)
C++ da standart andozalar kutubxonasi (STL) vektorlar, roʻyxatlar, navbatlar va boshqalar kabi algoritmlar va maʼlumotlar tuzilmalarini amalga oshirish uchun dasturlash vositalari toʻplamini taqdim etadi.
STL ushbu ma'lumotlar tuzilmalari va algoritmlarini sinchkovlik bilan sinovdan o'tgan umumiy maqsadli sinflar va funksiyalardan foydalangan holda amalga oshiradi.
C++ STL 3 ta asosiy komponentga ega:
Bularga qo'shimcha ravishda STL yana bir qancha funksiyalarni, jumladan, funksiya ob'ektlarini, aqlli ko'rsatgichlarni va istisnolarni boshqarish mexanizmlarini taqdim etadi.
STL konteynerlari ma'lumotlarni saqlaydi va kerak bo'lganda ularni muayyan tarzda tartibga soladi.
Masalan, vektorlar bir xil turdagi ma'lumotlarni ketma-ketlikda saqlaydi. Holbuki, xaritalar ma'lumotlarni kalit-qiymat juftliklarida saqlaydi.
STL konteynerlarini 3 turga ajratishimiz mumkin:
Konteynerlar haqida ko'proq ma'lumot olish uchun C++ STL Containers qo'llanmamizga tashrif buyuring.
[!NOTE] STL massivi biz hozirgacha ishlatib kelgan umumiy massivlardan farq qiladi. STL massivi
std::arraysinfida aniqlanadi, u massiv ma'lumotlar strukturasiga qo'shimcha ravishda ko'plab foydali funksiyalar va algoritmlarni o'z ichiga oladi. Bu xususiyatlar oddiy massivlarda mavjud emas.
C++ da vektorlar o'lchami o'zgartiriladigan massivlarga o'xshaydi; ular bir xil turdagi ma'lumotlarni ketma-ketlikda saqlaydi va kerak bo'lganda ularning hajmini ish vaqtida o'zgartirish mumkin.
Vektordan foydalanish uchun <vector> sarlavha faylini import qilishimiz kerak.
#include <iostream>
#include <vector>
using namespace std;
int main() {
// int tipidagi vektor yaratish
vector<int> numbers {1, 2, 3, 4, 5};
// diapazonli sikl yordamida vektor elementlarini chop etish
for (int number : numbers) {
cout << number << " ";
}
return 0;
}
Chiqish
1 2 3 4 5
Bu erda biz int tipidagi 5 ta elementdan iborat raqamlar nomli vektorni yaratdik.
Keyin vektorning barcha elementlarini chop etish uchun ranged for loop dan foydalandik.
C++ da vektorlar haqida koʻproq maʼlumot olish uchun C++ Vectors qoʻllanmamizga tashrif buyuring.
Iteratorlar - bu konteyner elementlariga kirish uchun ishlatiladigan ob'ektlar.
Biz C++ standart andozalar kutubxonasida har bir konteyner uchun iteratorni e'lon qilishimiz mumkin. Masalan,
vector<int>::iterator it;
Biz konteyner elementlariga ishora qiluvchi iteratorlarni qaytarish uchun begin() , end() va hokazo kabi iterator aʼzo funksiyalaridan tez-tez foydalanamiz. Masalan,
vector<int> numbers = {3, 2, 5, 1, 4};
vector<int>::iterator itr1 = numbers.begin();
vector<int>::iterator itr2 = numbers.end();
Bu yerga,
-numbers.begin() - raqamlar vektorining, ya'ni 3-elementning boshiga ishora qiluvchi iteratorni qaytaradi
-numbers.end() - raqamlar vektorining oxiriga ishora qiluvchi iteratorni qaytaradi.
[!NOTE]
numbers.end()yakuniy vektor elementiga iteratorni qaytarmaydi 4. Buning o'rniga u yakuniy elementdan keyin keladigan nazariy elementga iteratorni qaytaradi. Xuddi shu narsa boshqa barcha konteyner turlariga ham tegishli.
STL-dagi iteratorlar haqida ko'proq ma'lumot olish uchun C++ STL iteratorlari bo'yicha o'quv qo'llanmamizga tashrif buyuring.
#include <iostream>
#include <vector>
using namespace std;
int main() {
// int tipidagi vektorni ishga tushirish
vector<int> numbers {1, 2, 3, 4, 5};
// birinchi elementga ishora qilish uchun vektor iteratorini ishga tushiring
vector<int>::iterator itr = numbers.begin();
cout << "First Element: " << *itr << " "<<endl;
// oxirgi elementga ishora qilish uchun iteratorni o'zgartiring
itr = numbers.end() - 1;
cout << "Last Element: " << *itr;
return 0;
}
Chiqish
First Element: 1
Last Element: 5
Bu erda biz numbers.end() o'rniga numbers.end()- 1 dan foydalandik.
Buning sababi, end() funksiyasi konteynerning oxirgi elementidan keyin keladigan nazariy elementga ishora qiladi.
Yakuniy elementga ishora qilish uchun numbers.end() dan 1 ni ayirishimiz kerak. Xuddi shunday, numbers.end()- 2 kodidan foydalanish ikkinchi-oxirgi elementga ishora qiladi va hokazo.
[!NOTE] Itr oldidagi yulduzcha
*iterator ko'rsatgan element qiymatiga kirishni bildiradi. Bu dereferencing pointers ga o'xshaydi. Bundan tashqari, biz iteratorlarni chop etishga harakat qilganimizda, biz xatoga duch kelamiz.// xato kout << itr << " ";Buning sababi, ko'rsatkichlardan farqli o'laroq, biz iteratorni chop eta olmaymiz.
Algoritm - bu ma'lum bir masalani hal qilish uchun bir qator ko'rsatmalar.
C++ tilida biz ba'zi tez-tez ishlatiladigan algoritmlarni amalga oshirish uchun standart andozalar kutubxonasidan foydalanishimiz mumkin. Ushbu STL komponentlari oddiygina "algoritmlar kutubxonasi" sifatida tanilgan.
C++ standart andozalar kutubxonasida eng ko'p ishlatiladigan algoritmlardan ba'zilari:
Algoritmlar kutubxonasi haqida koʻproq maʼlumot olish uchun C++ STL algoritmlari boʻyicha oʻquv qoʻllanmamizga tashrif buyuring.
#include <iostream>
#include <algorithm>
#include <vector>
using namespace std;
int main() {
// int tipidagi vektorni ishga tushirish
vector<int> numbers = {3, 2, 5, 1, 4};
// vektor elementlarini o'sish tartibida tartiblang
sort(numbers.begin(), numbers.end());
// tartiblangan vektorni chop eting
for (int number : numbers) {
cout << number << " ";
}
return 0;
}
Chiqish
1 2 3 4 5
Ushbu misolda biz sort() funksiyasidan numbers vektorining elementlarini ortib boruvchi tartibda tartiblash uchun foydalandik.
sort() funksiyasidan foydalanish uchun <algorithm> sarlavha faylini import qilganimizga e'tibor bering.