background image

Standardowa biblioteka szablonów – 

podstawowe cechy i elementy

 2005/2006-2007/2010

Andrzej Walczak

background image

Składniki STL

• Ich podstawowy podział to: kontenery, iteratory, 

algorytmy

• Kontenery służą do zarządzania kolekcjami 

obiektów takiego samego typu. Realizowane są 
jako tablice albo jako listy. Mogą także być 
zorganizowane jako drzewa.

• Iteratory obsługują kolekcje kontenerów poprzez 

wspólny interfejs.  Jest on podobny do interfejsu 
wskaźników.

• Algorytmy służą do wykonywania operacji na 

elementach kolekcji. Mogą je modyfikować, 
sortować, poddawać dowolnym 
przekształceniom. Posługują się iteratorami ale 
mogą definiować własne funkcje.

background image

Kontenery

• Tworzą dwa podstawowe typy: kontenery 

sekwencyjne oraz kontenery asocjacyjne

• Kontenery sekwencyjne to: wektory, kolejki 

dwustronne i listy

• Kontenery asocjacyjne to kolekcje sortowane, w 

których pozycja elementu zależy wyłącznie od 
jego wartości zgodnie z kryterium sortowania. 
Wyróżniamy kontenery typu zbiór (set) , 
wielozbiór (multiset), mapa (map) oraz 
wielomapa (multimap). Sortowanie w 
kontenerze asocjacyjnym jest automatyczne.

background image

Kontener sekwencyjny - 

wektor

• PRZYKŁAD

• #include <iostream.h>
• #include <vector>
• #include <conio.h>
• /////////////
• using namespace std;
• int main()
• {
• vector<int> dupa; // otwiera kontener 
• //vector na liczby integer 
• //wg szblonu klasy vector
• //nazwa kontenera jest dowolna

background image

//doklej elementy od 1 do 10

int i;

//nie musimy wprowadzac rozmiaru kolekcji jak 

//przy tablicach

//rozmiar tworzony jest dynamicznie

for (i=1; i<=10; ++i){

dupa.push_back(i);// nazwa okresla obiekt szablonu klasy

}

//wypisz kolekcje

for (i=0;i<dupa.size();++i){

cout<<dupa[i]<<"\n";

} cout<<endl;

getch();

return 0;

}

background image

Przykład 2

#include <iostream.h>
#include <vector>
#include <conio.h>
/////////////
using namespace std;
int main()
{
vector<float> coll; // otwiera kontener 
//vector na liczby float 
//wg szblonu klasy vector
//nazwa kontenera jest dowolna

background image

int i;

//nie musimy wprowadzac rozmiaru kolekcji 
jak 

//przy tablicach

//rozmiar tworzony jest dynamicznie

for (i=1; i<=10; ++i){

coll.push_back(i*1.2);

}

//wypisz kolekcje

for (i=0;i<coll.size();++i){

cout<<coll[i]<<"\n";

}

cout<<endl;

getch();

return 0;

}

background image

Kontener sekwencyjny – lista 

dwukierunkowa (deque=double 

ended queue)

• Jest to dynamiczna tablica zorganizowana tak, aby zapisywanie 

mogło się odbywać na każdym jej końcu

• PRZYKŁAD
• #include <iostream.h>
• #include <deque>
• #include <conio.h>
• /////////////
• using namespace std;
• int main()
• {
• deque<float> coll; // otwiera kontener 
• //degue na liczby float 
• //wg szablonu klasy degue
• //nazwa kontenera jest dowolna

background image

//doklej elementy od 1 do 10

int i;

//nie musimy wprowadzac rozmiaru kolekcji jak 

//przy tablicach

//rozmiar tworzony jest dynamicznie

for (i=1; i<=10; ++i){

coll.push_front(i*1.2);/// FUNKCJA DOPISYWANIA NA POCZATEK 
KOLEJKI

}

//wypisz kolekcje

for (i=0;i<coll.size();++i){

cout<<coll[i]<<"\n";

}

cout<<endl;

getch();

return 0;

}

background image

Kontener sekwencyjny – LISTA

• Jest to kontener sekwencyjny dwukierunkowy
• #include <iostream.h>
• #include <list>
• #include <conio.h>
• /////////////
• using namespace std;
• void main()
• {
• list<char> coll; // otwiera kontener 
• //list na znaki 
• //wg szablonu klasy list
• //nazwa kontenera jest dowolna
• //*******************************

background image

//nie musimy wprowadzac rozmiaru kolekcji  

//jak przy tablicach

//rozmiar tworzony jest dynamicznie

for (char c='a'; c<='z'; ++c){

coll.push_back(c);}

while(!coll.empty()){

 

cout<<coll.front()<<' ';//zwraca pierwszy element 

dla niepustej listy

coll.pop_front();}// usuwa pierwszy element

cout<<"\n"<<endl;

getch();

}

background image

Kontenery asocjacyjne

• Są nimi:
• Zbiory (set) – kolekcja elementów posortowanych 

wg wartości. Każdy element może wystąpić tylko 
raz.

• Wielozbiory (multiset)– j.w. Tylko wartości mogą 

się powtarzać.

• Mapy(map) – to zbiory par klucz-wartość np.. 

Nazwa i kolejność jej wystąpienia. Elementy mapy 
nie mogą się powtarzać.

• Multimapy (multimap) – j.w. Tylko pary klucz-

wartość mogą się powtarzać.

background image

Iteratory

• Jest to obiekt wyposażony w możliwość nawigowania po 

elementach kolekcji kontenera.

• Operacjami iteratorów są:
• * zwraca element z aktualnej pozycji
• ++ przechodzi do nastepnego elementu
• ++ oraz != zwraca wartość logiczną o tym, czy elementy 

maja te sama pozycję czy tez nie

• = przypisanie pozycji do której odnosi się iterator
• Funkcje kontenerowe: begin() – zwraca iterator 

pokazujący początek elementów w niepustym kontenerze

• Funkcje kontenerowe: end() – zwraca iterator pokazujący 

element za końcem elementów w niepustym kontenerze

background image

#include <iostream.h>

#include <list>

#include <conio.h>

using namespace std;

void main(){

list<char> coll; // otwiera kontener 

for (char c='a'; c<='z'; ++c){

coll.push_back(c);}

list<char>::const_iterator pos;

for (pos=coll.begin();pos!=coll.end();++pos)

{cout<<*pos<<' ';}

cout<<"\n"<<endl;

getch();

}


Document Outline