STL, czyli o co tyle hałasu
Zanim rozpoczniesz naukę STL-a warto żebyś wiedział coś więcej o tym, czego będziesz się uczył w tym kursie. W świecie programowania C++, hasło STL pojawia się nieustannie i zawsze jest o nim głośno... często początkujące osoby, które nie znają STL-a pytają się co to jest i czemu go tak wszyscy zachwalają. Bardzo często spotykamy się z następującą odpowiedzią:
STL jest to zbiór kontenerów, iteratorów i algorytmów - naprawdę świetna sprawa, nie wiem jak bez tego można pisać programy... - ale co to tak naprawdę znaczy? Ostatni termin tj. algorytmy jest zrozumiały, jednak algorytmy w STL-u nie powalają z nóg... raczej można powiedzieć, że biblioteka ta jest uboga, a co gorsza nie ma tam nic co mogłoby się przydać bezpośrednio do gier (np. algorytmy wykrywania kolizji itp - tego w STL-u nie znajdziesz).
Czym są kontenery?
Kontenery (zwane też pojemnikami) są terminologią, która prawdopodobnie porusza wyobraźnię programisty nieznającego STL-a...
Może to kontener na śmieci (ale po co mi coś takiego?)... może to coś, do czego mogę wrzucać dane różnego typu i je później odczytywać - wkońcu kolega coś podobnego mi mówił... ale jak by to miało niby działać?.
Definicja kontenera
Kontener jest to
struktura danych, która służy do przechowywania danych w
zorganizowany sposób. Wszystkie elementy kontenera
muszą być takiego samego typu. Każdy kontener umożliwia nam wykonanie takich operacji jak:
Niektóre z nich dają nam również możliwość wyszukiwania elementu w kontenerze. Kontenery w zależności od przyjętej organizacji danych różnią się
szybkością wykonywania poszczególnych operacji.
Co to jest złożoność obliczeniowa?
Szybkość nazywana jest przez programistów
złożonością obliczeniową i oznaczana jest przez dużą literę
O. Złożoność obliczeniowa jest to
ilość podstawowych operacji jakie
trzeba wykonać, aby
został zrealizowany dany algorytm, posiadając
określoną ilość danych wejściowych. Przykłady:
K - jest to stała, która może mieć wartość zarówno 1 jak i 1000000. Zazwyczaj stała ta jest tak mała, że jest ona pomijalna przy podawaniu złożoności obliczeniowej algorytmów. Najczęściej wynosi ona 1 lub 2.
1.2.3. Kontenery dostępne w STL-u
W STL-u znajduje się kilka kontenerów do zarządzania danymi. Każdy z nich posiada inną złożoność obliczeniową dla poniższych operacji:
Jak już wcześniej wspomniałem wyszukiwanie danych nie jest dostępne w niektórych kontenerach, jednak jest to zabieg celowy o czym przekonasz się później. Poniżej przedstawiam listę kontenerów jakie znajdziesz w STL-u:
Oprócz kontenerów w STL-u istnieją również
adaptery:
Opisy poszczególnych kontenerów (i adapterów), złożoności obliczeniowe operacji, przykłady itp. będą przedstawiane stopniowo w kolejnych rozdziałach.
Co to są adaptery?
Adapter jest jednym z
wzorców projektowych. Zadaniem adaptera jest przekształcanie interfejsów różnych klas w taki, który jest oczekiwany przez użytkownika. Innymi słowy adapter daje nam metody, za pomocą których możemy np. pobierać i zapisywać dane w określony sposób, ale sposób organizacji danych w adapterze jest nieznany. Dzięki adapterowi możemy zmienić klasę zarządzającą danymi nie zmieniając działania całej aplikacji.
Co to są iteratory?
Iterator jest to obiekt pozwalający na sekwencyjny dostęp do wszystkich danych, znajdujących się w konkretnym kontenerze. Dzięki niemu możemy w łatwy sposób poruszać się po kontenerze, usuwać wybrane elementy lub napisać wyszukiwanie o złożoności obliczeniowej liniowej, jeśli dany kontener nie posiada wyszukiwania.