STL – Standardowa Biblioteka Szablonów STL (Standard Template Library) - biblioteka C++ zawierająca algorytmy, kontenery, iteratory oraz inne konstrukcje w formie szablonów, gotowe do użycia w programach.
Wybrane obiekty
stack — implementacja stosu
queue — implementacja kolejki fifo
deque — implementacja listy dwukierunkowej
priority_queue — implementacja kolejki priorytetowej
vector — implementacja struktury podobnej do tablicy
map — tablica asocjacyjna, której klucze nie powtarzają się
multimap — tablica asocjacyjna, której klucze powtarzają się
set — zbiór uporządkowany, którego elementy nie powtarzają się
multiset — zbiór uporządkowany, którego elementy powtarzają się
list — implementacja listy dwukierunkowej
forward_list — implementacja listy jednokierunkowa
Wektor
Klasa vector reprezentuje tablicę, wyposażoną w kilka dodatkowych mechanizmów. Elementy wektora mogą być dowolnego typu.
#include <vector> //plik nagłówkowy
vector <typ_elementow> nazwa; // konstruktor pustego wektora:
vector <int> w(5, 1); //konstruktor 5-elmentowego wektora o wartościach 1
w.push_back(element) //dodanie elementu na koniec tablicy
w.size(); //liczba elementów
w.clear(); //czyszczenie wektora
w.empty(); //zwraca 1, gdy wektor jest pusty, 0 - gdy nie jest pusty
w.pop_back() ; //usuwa ostatni element wektora
w.front() //pierwszy element, to samo co w[0]
w.back() //ostatni element
w.begin() //iterator wskazujący na pierwszy element wektora w
w.end() //zwraca iterator wskazujacy na element za ostatnim elementem
w.insert(w.begin()+1, 2, 0); //wstawia dwa zera zaczynając od indeksu 1
w.insert(w.end()-1,3,0); //wstawia trzy zera przed ostatnim elementem
Przykład
vector <int> dane(3,0);
dane.push_back(1);
for(auto it=dane.begin();it!=dane.end();it++) //wyświetlenie wektora z użyciem iteratora
cout<<*it;
for(int i=0;i<dane.size();i++) //wyświetlenie wektora z użyciem indeksu
cout<<dane[i];
Mapa
Mapa to posortowany kontener asocjacyjny (klucz,wartość), czyli zbiornik o zmiennej długości gromadzący dane, które można dodawać i usuwać.
#include <map> //nagłówek
map <typ_klucz, typ_wartosc> nazwa; //kostruktor pustej mapy
m[klucz]=wartosc; //dodanie pary (klucz,wartość) do mapy mp
mp.insert({klucz,wartosc}); //dodanie pary (klucz,wartość) do mapy mp
mp.size() //liczba elementów mapy
mp.empty() //sprawdza, czy mapa jest pusta
mp.clear() //czyszczenie mapy
mp.erase(klucz) //usuwa jeden element
mp.find(klucz) //zwaca iterator do elementu klucz, lub na koniec mapy mp.end()
mp.count(klucz) //zwraca liczbę wystąpień klucza
for(auto &el:mp) //iteracja po elementach mapy (klucz,wartość) - wyświetlenie zawartości
{
cout<<el.first<<": "<<el.second<<endl;
}
for(auto it=mp.begin();it!=mp.end();it++) //sposób z użyciem iteratora
{
cout<< it-> first<<": "<< it -> second <<endl;
}
Stos
Stos jest strukturą danych zorganizowaną zgodnie z zasadą LIFO (Last In, First Out). W odróżnieniu od np. tablicy stos nie jest adresowany – zawsze dostępna jest tylko ostatnio zapisana zmienna. Dzięki temu ilość operacji na stosie ogranicza się do dwóch: odłożenia na stos, i pobrania ze stosu. Zmienna pobierana jest automatycznie usuwana ze stosu, umożliwiając pobranie poprzednio odłożonej zmiennej.
#include <stack>
stack <typ> nazwa;
Metody:
.push - umieszczenie nowego elementu na szczycie stosu;
.pop - zwócenie i zdjęcie istniejącego elementu ze szczytu stosu;
.empty - informacja czy stos jest pusty;
.size - ilość elementów umieszczonych na stosie;
.top - wartość szczytowego elementu na stosie;
Zbiór
Zbiór to kontener przechowujący unikalne elementy w określonej kolejności.
#include <set> - dołączenie biblioteki
Przykład. (unikalne litery w słowie)
string s="BAAABCA"
set <char> znaki; //utworzenie pustego zbioru
for(int i=0;i<s.size();i++)
znaki.insert(s[i]); //dodawanie elementów do zbioru
for(auto it=znaki.begin();it!=znaki.end();it++) //wyświetlanie zbioru
cout<<*it;