PROGRAMMALASTIRIW II-LEKCIYA-2
.docx2-Lekciya. Konteynerler(Kollekciyalar). STL kitapxanaları. Konteyner klaslar. Sızıqlı konteynerler (array, vector, deque, list, forward_list).
Jobası:
1. Standart shablon kitapxanası
2. C++ te STL konteynerleri hám olardıń túrleri
3. array, vector, deque, list, forward_list hám forward klasları
Standart shablon kitapxanası (Standard Template Library - STL)
C++ te standart shablon kitapxanası (Standard Template Library - STL) vektorlar, dizimler, gezekler h.t.b sıyaqlı algoritmler menen maǵlıwmatlar strukturasın ámelge asırıw ushın programmalastırıw qurallarınıń jıynaǵın usınadı. STL bul maǵlıwmatlar strukturası menen algoritmlerin qatań tekserilgen ulıwma maqsettegi klaslar menen funkciyalardı paydalanıp ámelge asıradı.
C++ te STL niń 3 tiykarǵı komponenti bar:
Konteynerler
Iteratorlar
Algoritmler
Bularǵa qosımsha STL sonıń menen qatar funkciya obyektlerin, smart kórsetkishlerdi hám ózgeshe jaǵdaylardı qayta islew mexanizmlerin qosqanda, birneshe basqa imkaniyatlardı támiyinleydi.
C++ te STL konteynerleri
STL konteynerleri maǵlıwmatlardı saqlaydı hám zárúr bolǵan jaǵdayda olardı belgili bir tártipte shólkemlestiredi.
Mısalı, vektorlar (vectors) bir tipli maǵlıwmatlardı retlilik (izbe-izlik) penen saqlaydı. Al kartalar (maps) maǵlıwmatlardı gilt-mánis juplarında saqlaydı.
STL konteynerlerin 3 túrge bóliwge boladı:
1. Konteynerlerdiń izbe-izligi (retliligi):
Array (Massiv)
Vector (Vektor)
Queue (Gezek)
Deque (Sonlıqtan)
Forward_list (Aldıǵa_dizim)
List (Dizim)
2. Associativ konteynerler:
Set
Multiset
Map
Multimap
3. Retsiz associativli konteynerler:
Unordered_set
Unordered_multiset
Unordered_map
Unordered_multimap
array klası shablonı
template<class T,
std::size_t N>
struct array;
array - N ólshemdegi massivti qamtıytuǵın konteyner.
array-dıń funkciya aǵzaları
Atı |
Táriyip |
at |
Kórsetilgen elementke indeks tekseriwshi menen kiriwdi támiyinleydi |
operator[] |
Belgilengen elementke kiriwdi támiyinleydi |
front |
Birinshi elementke kiriwdi támiyinleydi |
back |
Aqırǵı elementke kiriwdi támiyinleydi |
data (C++11) |
Massivtiń birinshi haqıyqıy elementine kórsetkishti qaytaradı |
vector klası
Vector klasınıń shablonı
template< class T, class Allocator = std::allocator<T>
> class vector;
namespace pmr { template <class T> using vector = std::vector<T, std::polymorphic_allocator<T>>;
}
1) std:: vector - ózgeriwsheń parametrdegi izbe-iz konteynerdi qamtıp alıwshı massiv.
2) std :: pmr :: vector shablon eliklewleri polimorf ajıratıwshı járdeminde.
Allocator - elementler ushın yad ajıratıwda qollanılatuǵın klass.
deque klası
Deque klasınıń shablonı:
template<class T,
class Allocator = std::allocator<T>
> class deque;
std :: deque (óz-ara gezek) - indekslengen izbe-iz konteyner, bul sizge elementlerdi basınan hám aqırınan tez kirgiziw hám alıp taslaw imkaniyatın beredi. Bunnan tısqarı, óz-ara (eki tárepleme) gezektiń eki tóbesine ornatıw hám óshiriw kórsetkishleri hám basqa elementlerge baylanıstırıwdı qaldıradı.
Std :: vector-dan ayırmashılıǵı, deque elementleri turaqlı túrde saqlanbaydı: ádetde bul belgilengen ólshemdegi ajıratılǵan qatarlar kompleksinen paydalanıp ámelge asırıladı. deque avtomatikalıq túrde qayta islenedi, kerek bolǵanda keńeyedi. deque keńeytpesi std :: vector keńeytpesine qaraǵanda qolaylılaw, sebebi ol ámeldegi elementlerdi jańa yadqa nusqalawdı talap etpeydi.
list klası
list klası shablonı:
template < class T, class Allocator = std::allocator<T>
> class list;
List - bul konteynerdiń hár qanday poziciyasınan elementlerdi tez kirgiziw hám alıp taslawdı qollaytuǵın klass. Tez tosınarlı kirisiw qollamaydı. Eki baylanısqan dizim retinde ámelge asıriladı. std::forward_list-den ayrıqsha bolıp esaplanıw, bul konteyner óz-ara iteraciyani támiyinleydi, sonıń menen birge paydalanılǵan yadqa salıstırǵanda ónimli emes.
forward_list
forward_list klasınıń shablonı:
template <class T, class Allocator = std::allocator<T>
> class forward_list;
Forward_list - konteynerden elementlerdi kirgiziw hám alıp taslaw mexanizmin támiyinleytuǵın klass. Tez tosınarlı kirisiwdi qollamaydı. Ol bir baǵdarlanǵan dizim retinde ámelge asırıladı hám C tilindegi soǵan uqsas programma menen salıstırǵanda qosımsha shıǵınlarǵa iye emes: std :: list ten ayırmashılıǵı, bul túrdegi konteyner óz-ara iteraciyanı qollamaydı.
1-mısal: C++ STL Konteynerler: Vector
C++ tilinde vektorlar ólshemi ózgertilgen massivler sıyaqlı; olar bir tiptegi maǵlıwmatlardı izbe-iz saqlaydı hám zárúr bolǵan jaǵdayda olardıń ólshemin orınlaw waqtında ózgertiwge boladı. Vektordı paydalanıw ushın <vector> tema (kitapxana) faylın import etiwimiz kerek.
#include <iostream> #include <vector>
using namespace std;
int main() {
//int tipindegi vektor jaratıw vector<int> numbers {1, 2, 3, 4, 5};
//vektor elementlerin diapazonlı cikl járdeminde basıp shıǵarıw for (int number : numbers) { cout << number << " "; }
return 0; } |
Nátiyje:
1 2 3 4 5 |
Kodtıń orınlanıwı |
|
Bunda biz 5 elementten ibarat numbers dep atalatuǵın int tipli vektordı dúzdik. Sonnan keyin vektordıń barlıq elementlerin basıp shıǵarıw ushın range for ciklin qollandıq.
BAQLAW SORAWLARÍ:
1. C++ te standart shablon kitapxanasınıń wazıypası qanday?
2. C++ te STL-diń neshe tiykarǵı komponenti bar?
3. Konteynerlerdiń izbe-izligi (retliligi)ne neler kiredi?
4. array klası shablonı qanday?
5. vector klası haqqında mısallar keltiriń?
6. deque klasınıń shablonı qanday?