U C++, STL (Standardna biblioteka predložaka), spremnici su objekti koji se koriste za pohranjivanje kolekcija drugih objekata. Oni rade slično predlošcima klasa i podržavaju veliki broj tipova elemenata i pružaju funkcije članova za pristup njihovim elementima izravno ili putem iteratora.
Vrste C++ STL spremnika
U C++-u postoje tri vrste STL-a spremnici , koji su navedeni u nastavku:
1: Sekvencijalni spremnici
U C++-u, sekvencijalni spremnici omogućuju nam pohranjivanje stavki koje se mogu dohvatiti sekvencijalno. ove spremnici su kodirani kao nizovi ili povezani popisi struktura podataka. Neke vrste sekvencijalnih spremnika dane su u nastavku.
- Vektor: To je niz dinamičke veličine koji je pohranjen u memoriji na kontinuirani način.
- O čemu: Predstavlja dvostruki red čekanja koji podržava operacije za umetanje i brisanje.
- niz: To je statički niz koji se dodjeljuje tijekom kompilacije, a njegova veličina ostaje fiksna.
- Popis: To je dvostruko povezana lista koja obavlja brzo umetanje i brisanje elemenata na bilo kojem mjestu na listi.
- Popis za prosljeđivanje: To je jednostruko povezan popis poput popisa, ali možete ga kretati samo u jednom smjeru.
Primjer
U ovom primjeru koristit ćemo klasa vektora pokazati kako a sekvencijalno spremnik djeluje.
#include
#uključi
korištenje imenskog prostora std;
int glavni ( ) {
// inicijalizirati vektor int tip
vektor < int > brojevi = { 10 , 2 , 16 , 70 , 5 } ;
// ispisati vektor
cout << 'Brojevi su: ' ;
za ( auto i ja: brojevi )
{
cout << ja << ', ' ;
}
povratak 0 ;
}
Gornji kod pokazuje upotrebu sekvencijalno spremnici u vektorskom formatu, koji omogućuje pohranjivanje nizova cijelih brojeva. Program inicijalizira vektor tipa integer, dodjeljuje mu vrijednosti i ispisuje ih pomoću petlje. Ovaj primjer pokazuje kako je lako pohraniti i pristupiti podacima u C++-u pomoću sekvencijalni spremnik .
2: Asocijativni spremnici
Asocijativni spremnici omogućuju nam pohranjivanje elemenata u određenom redoslijedu definiranom operatorom usporedbe. Za razliku od sekvencijalni spremnici , redoslijed elemenata u asocijativni spremnici održava se pomoću ključeva koji korisnicima omogućuju organiziranje i pristup elementima. Kada se element umetne u asocijativni spremnik , automatski se sortira na ispravnom mjestu na temelju ključa. Ove vrste spremnika implementirane su interno poput binarnih struktura podataka stabla.
The asocijativni spremnici kategorizirani su kao:
- Karta: zbirka parova ključ-vrijednost koji su razvrstani pomoću jedinstvenih ključeva
- Multimap: zbirka parova ključ-vrijednost koji su razvrstani pomoću ključeva
- set: Unikatni ključevi prikupljeni i složeni po ključevima.
- Multiset: zbirka ključeva koji su razvrstani pomoću ključeva
Primjer
Da ilustriram kako an asocijativni spremnik radi, koristit ćemo postavljena klasa u ovom primjeru.
#include#include
korištenje imenskog prostora std;
int glavni ( )
{
// inicijalizirati a postaviti od int tip
postaviti < int > brojevi = { 10 , 2 , 16 , 70 , 5 } ;
// ispisati postaviti
cout << 'Brojevi su: ' ;
za ( auto i ja: brojevi )
{
cout << ja << ', ' ;
}
povratak 0 ;
}
Gornji kod inicijalizira skup cijelih brojeva u C++, što je primjer asocijativnog spremnika. Skup osigurava da su elementi prema zadanim postavkama poredani uzlaznim redoslijedom. Kôd zatim ispisuje brojeve u skupu koristeći for petlju.
3: Neuređeni asocijativni spremnici
U C++, nesređeni asocijativni spremnici koriste se za pružanje nesortiranih verzija an asocijativni spremnik . Oni su interno implementirani poput struktura podataka hash tablice. The asocijativni spremnici kategorizirani su kao:
- Neuređena karta: zbirka parova ključ-vrijednost koji su raspršeni pomoću jedinstvenih ključeva.
- Neuređena multimapa: zbirka parova ključ-vrijednost koja je hashirana pomoću ključeva.
- Neuređeni skup: zbirka jedinstvenih ključeva koji su hashirani pomoću ključeva.
- Neuređeni multiset: zbirka ključeva koji su hashirani pomoću ključeva.
Primjer
Da bismo ilustrirali kako nesređeni asocijativni spremnik radi, koristit ćemo neuređen skup klase u ovom primjeru.
#include#include
korištenje imenskog prostora std;
int glavni ( )
{
// inicijalizirati unordered_set int tip
neuređeni_skup < int > brojevi = { 10 , 2 , 16 , 70 , 5 } ;
// ispisati postaviti
cout << 'Brojevi su: ' ;
za ( auto i ja: brojevi )
{
cout << ja << ', ' ;
}
povratak 0 ;
}
Zaključak
STL C++ spremnik je objekt držač za pohranu zbirke drugih objekata. Rade slično predlošcima klasa i podržavaju veliki broj tipova elemenata. U ovom vodiču raspravljali smo o najčešće korištenim vrstama STL C++ spremnika, koji su sekvencijalni spremnici, asocijativni spremnici kao i nesređeni asocijativni spremnici .