Standart shablonlar kutubxonasi. C++ tili o'z dasturlaringizni yaratishda foydalanishingiz mumkin bo'lgan sinf kutubxonasi bilan birga keladi. Bu kutubxona standart shablonlar kutubxonasi (Standart Template Library) deb ataladi. Ushbu kutubxonalardan konteynerlarni ko’rib chiqamiz.
STL konteynerlari
Hozirgacha eng ko'p ishlatiladigan STL funksionalligi konteyner sinflari (yoki ular "konteynerlar" deb ham ataladi). STL turli vaziyatlarda ishlatilishi mumkin bo'lgan juda ko'p turli xil konteyner sinflarini o'z ichiga oladi. Umuman olganda, STL konteynerlari uchta asosiy toifaga bo'linadi:
ketma-ket;
assotsiativ;
adapterlar.
Endi ularni qisqacha ko'rib chiqamiz.
Ketma-ket konteynerlar. Ketma-ket konteynerlar elementlari ketma-ket joylashgan konteyner sinflari. Ularning o'ziga xos xususiyati shundaki, siz elementingizni konteynerning istalgan joyiga qo'shishingiz mumkin. Ketma-ket konteynerning eng keng tarqalgan namunasi - massiv: massivga 4 ta element qo'shganda, bu elementlar (massivda) siz qo'shgan aniq tartibda paydo bo'ladi.
C++11 dan boshlab, STL 6 ta ketma-ketlik konteynerlarini o'z ichiga oladi:
vektor;
deque;
array;
list;
forward_list;
basic_string.
Vektor sinfi (yoki oddiygina "vektor") dinamik massiv bo'lib, uning barcha elementlarini o'z ichiga olishi uchun kerak bo'lganda o'sadi. Vektor klassi [] indekslash operatori orqali o'z elementlariga o'zboshimchalik bilan kirish imkonini beradi, shuningdek, elementlarni qo'shish va o'chirishni qo'llab-quvvatlaydi.
Quyidagi dasturda vektorga 5 ta butun son qo'shamiz va ularni keyinchalik ko'rsatish uchun kirish uchun qayta yuklangan indekslash operatoridan [] foydalanamiz:
#include
#include
using namespace std;
int main()
{
vector vect;
for (int count=0; count < 5; ++count)
vect.push_back(10 - count);
for (int index=0; index < vect.size(); ++index)
cout << vect[index] << ' ';
cout << '\n';
}
Dasturni bajarish natijasi:
10 9 8 7 6
deque (yoki oddiygina "deklar") sinfi dinamik massiv sifatida amalga oshirilgan dek bo'lib, u har ikki tomondan ham o'sishi mumkin. Masalan:
#include
#include
using namespace std;
int main()
{
deque deq;
for (int count=0; count < 4; ++count)
{
deq.push_back(count); //massivning oxiridan son qo'shish
deq.push_front(10 - count); // massivning boshidan son qo'shish
}
for (int index=0; index < deq.size(); ++index)
cout << deq[index] << ' ';
cout << '\n';
}
Dasturni bajarish natijasi:
7 8 9 10 0 1 2 3
List (yoki oddiygina “roʻyxat”) ikki tomonlama bogʻlangan roʻyxat boʻlib, uning har bir elementi 2 ta koʻrsatkichdan iborat: biri roʻyxatning keyingi elementiga, ikkinchisi esa roʻyxatning oldingi elementiga ishora qiladi. Ro'yxat faqat ro'yxatning boshi va oxiriga kirishni ta'minlaydi - tasodifiy kirish taqiqlanadi. Agar siz o'rtadagi biror qiymatni topmoqchi bo'lsangiz, unda siz izlayotgan narsani topmaguningizcha, bir chetidan boshlashingiz va ro'yxatning har bir elementini takrorlashingiz kerak. Ikki marta bog'langan ro'yxatning afzalligi shundaki, agar siz qayerga qo'shmoqchi bo'lsangiz, elementlarni qo'shish juda tezdir. Odatda, iteratorlar ikki marta bog'langan ro'yxat elementlarini takrorlash uchun ishlatiladi.
Garchi string (va wstring) sinfi odatda ketma-ket konteyner sifatida aytilmasa ham, aslida u char (yoki wchar) tipidagi elementlarga ega vektor sifatida ko'rib chiqilishi mumkin.
Do'stlaringiz bilan baham: |