Standard Template Library
Książki o STL
Nicolai M. Josuttis: C++ Biblioteka standardowa Podręcznik Programisty, Helion 2003, przykłady: ftp://ftp.helion.pl/przyklady/cpbspp.zip) Grębosz J.: Pasja C++, RM, W-wa Inne (wymienione na wykładzie Nr 1)
Biblioteka standardowa języka C++
STL Klasy strumieniowe Klasy łańcuchowe
(biblioteka zdefiniowana w namespace std )
Biblioteka standardowa języka C++
Główne składniki
Kontenery (listy, wektory, etc.) Iteratory (interfejs pomiędzy algorytmami a kontenerami) Algorytmy (proste, nie bardziej skomplikowane od wyszukiwania i sortowanie) Inne (obiekty funkcyjne, adaptory, ...)
STL to biblioteka wzorców! Dane odseparowane od metod (a co z ideą OOP?) Zaprojektowane dla programowania wysokopoziomowego Zaprojektowane dla programowania wydajnego
BTW: rząd złożoności algorytmu
O-notacja
Wyszukiwanie w posortowanej tablicy: Wyszukiwanie w nieuporządkowanej tablicy: quicksort: Sortowanie bąbelkowe:
O(log2(n)) O(n) O(n · log2(n)) O(n2)
Kontenery
Sekwencyjne
vector (tablica dynamiczna) dequeue (tablica dynamiczna dwukierunkowa) list (lista dwukierunkowa) (tablica i string nie są kontenerami STL, ale można je przetwarzać za pomocą algorytmów STL)
Asocjacyjne
set (drzewo binarne) multiset map, multimap
Kontenery
vector
Zaimplementowany jako tablica dynamiczna
szybkie push_back() szybki operator[] wolne insert()
Kontenery
deque
Zaimplementowany jako tablica dynamiczna
szybkie push_back() (vector może być szybszy) szybkie push_front() (nieobsługiwany przez vector) szybki operator[]
wolny insert()
Kontenery
list
Zaimplementowana jako lista dwukierunkowa
szybkie push_back() szybkie push_front() szybkie insert()
Nie ma operatora operator[]
Iteratory
Iteratory zachowują się jak zwyczajne wskaźniki ...
* -> ++ -== != = (vector, deq: -, <, >, +(int) )
Ale działają dla wszystkich kontenerów!
container.begin() container.end() przykład: list2.cpp
// zwróć iterator do pierwszego elementu. // ... do ostatniego
Kontenery
set
Zaimplementowany jako drzewo binarne
Sowrtowanie przy wstawianiu (porównywanie domyślnym operatorem<() ) Odpowiednik zbiorów matematycznych metoda find() szybkie insert() nie ma: push_back() nie ma: push_front() nie ma: operatora []
Kontenery
multiset
Dozwolone powtórzenia tej samej wartości Uporządkowanie wewnątrz grupy elementów o tych samych wartościach jest niezdefiniowane
Kontenery
multimap
multiset dla par: klucz, wartość – użyj make_pair()
Kontenery
map
set dla par: klucz, wartość – użyj make_pair()
Tylko dla kontenera map: operator[key]()
Indeksowanie wartością (tablica asocjacyjna)
Algorytmy ...
Przydałby się jeszcze semestr ...