Wykład 5 Wybrane zagadnienia programowania w C++ (c.d.) Kontenery - - wektor vector - - lista list - - kolejka queue - - stos stack Kontener asocjacyjny map 2016-01-08 Bazy danych-1 W5 1
Kontenery W programowaniu obiektowym kontener to "pojemnik" na dane. Typ przechowywanych danych określa argument szablonu. Kontener jest dynamiczną strukturą danych taką jak wektor, lista jednokierunkowa, lista dwukierunkowa, kolejka, stos itd. W przestrzeni nazw std znajdują się szablony klas implementujących wymienione wyżej kontenery. 2016-01-08 Bazy danych-1 W5 2
Kontener vector Szablon vector jest to struktura danych reprezentująca tablicę. Tablica jest zbudowana z elementów o typie przekazanym za pomocą parametru Type. Kontener ten umożliwia modyfikację rozmiaru tablicy w czasie życia obiektu. Dane w tablicy są ułożone w pamięci zawsze w sposób ciągły co oznacza, że kopiowanie danych do kontenera i z kontenera za pomocą funkcji takich jak np. memcpy jest zawsze bezpieczne. Kontener ten należy używać zawsze wtedy, gdy priorytetem jest posiadanie szybkiego dostępu do dowolnego elementu kontenera. Szablon vector umożliwia dodawanie oraz usuwanie elementów na koniec tablicy w czasie stałym. Dodawanie oraz usuwanie elementów z początku bądź ze środka kontenera możliwe jest w czasie liniowym zależnym od liczby elementów w kontenerze. Kontener vector dokonuje realokacji pamięci gdy jakakolwiek metoda szablonu musi zwiększyć rozmiar tablicy kontenera i jednocześnie w kontenerze nie ma wolnego obszaru pamięci na nowo dodawane elementy. 2016-01-08 Bazy danych-1 W5 3
Element assign at back begin capacity clear empty end erase Metoda Usuwa wszystkie istniejące elementy z kontenera, a następnie kopiuje wskazane elementy do kontenera. Zwraca referencję na element, który znajduje się na podanej pozycji w kontenerze Zwraca referencję na ostatni element w kontenerze. Zwraca iterator wskazujący na pierwszy element. Zwraca maksymalną liczbę elementów jaką może pomieścić kontener bez wykonywania realokacji pamięci. Usuwa wszystkie elementy z kontenera vector. Sprawdza czy kontener jest pusty. Zwraca iterator wskazujący na element będący za ostatnim elementem. Usuwa jeden element lub wiele elementów z kontenera vector występujących na podanej pozycji lub w podanym zakresie. 2016-01-08 Bazy danych-1 W5 4
front get_allocator insert max_size operator[] pop_back push_back rbegin rend Zwraca referencję na pierwszy element w kontenerze. Zwraca kopię alokatora używanego do tworzenia elementów kontenera Wstawia jeden element lub wiele elementów do kontenera vector na określonej pozycji. Maksymalna możliwa długość tablicy kontenera wyrażona w liczbie elementów. Zwraca referencję na element, który znajduje się na podanej pozycji w kontenerze Usuwa jeden element z kontenera vector, znajdujący się na jego końcu. Dodaje nowy element na końcu kontenera vector. Zwraca iterator odwrotny wskazujący na ostatni element. Zwraca iterator odwrotny wskazujący na element występujący bezpośrednio przed pierwszym elementem. 2016-01-08 Bazy danych-1 W5 5
reserve resize size swap Rezerwuje tyle miejsca w kontenerze, żeby pomieściła się wskazana liczba elementów bez konieczności wykonywania dodatkowej realokacji pamięci przy ich dodawaniu. Ustawia nowy rozmiar kontenera vector. Zwraca liczbę elementów znajdujących się aktualnie w kontenerze. Kontenery zamieniają się posiadanymi danymi. 2016-01-08 Bazy danych-1 W5 6
2016-01-08 Bazy danych-1 W5 7
2016-01-08 Bazy danych-1 W5 8
2016-01-08 Bazy danych-1 W5 9
Kontener lista list Zalecane użycie w przypadku częstych operacji wstawiania i usuwania elementów. Lista połączona podwójnie dwukierunkowa. Każdy węzeł jest dowiązany do poprzedniego i następnego węzła. Klasa ta posiada wszystkie metody klasy vector. Wykorzystuje mechanizm iteratora uogólniony wskaźnik. 2016-01-08 Bazy danych-1 W5 10
2016-01-08 Bazy danych-1 W5 11
2016-01-08 Bazy danych-1 W5 12
Kontener "kolejka" (queue) Implementuje strukturę danych, która działa wg strategii FIFO (pierwszy przyszedł pierwszy wychodzi). Umieszczanie elementów w kolejce jest możliwe tylko przez dodawanie ich na koniec (metoda push). Pobieranie elementów tylko z początku kolejki (metoda front). Metoda pop usuwa element z początku kolejki. 2016-01-08 Bazy danych-1 W5 13
~queue back empty front pop push queue Size Element destruktor Metoda Zwraca referencję na ostatni element w kolejce Sprawdza, czy kolejka jest pusta Zwraca referencję na pierwszy element w kolejce Usuwa element z początku kolejki Umieszcza nowy element na końcu kolejki Konstruktor Zwraca liczbę elementów znajdujących się w kolejce 2016-01-08 Bazy danych-1 W5 14
2016-01-08 Bazy danych-1 W5 15
2016-01-08 Bazy danych-1 W5 16
Kontener "stos" (stack) Implementuje strukturę danych, która działa wg strategii LIFO (ostatni przyszedł pierwszy wychodzi). Umieszczanie elementów na stosie jest możliwe tylko przez dodawanie ich na "szczyt" stosu (metoda push). Pobieranie tylko ze szczytu stosu (metoda top). Metoda pop usuwa element ze szczytu stosu. 2016-01-08 Bazy danych-1 W5 17
Metody w klasie stos (stack) - szablon klasy ~stack empty pop push size stack top Destruktor. Sprawdza czy stos jest pusty. Zdejmuje istniejący element ze szczytu stosu. Umieszcza nowy element na szczycie stosu. Zwraca liczbę elementów znajdujących się na stosie. Konstruktor. Zwraca referencję na szczytowy element stosu. 2016-01-08 Bazy danych-1 W5 18
2016-01-08 Bazy danych-1 W5 19
2016-01-08 Bazy danych-1 W5 20
Kontener asocjacyjny map Kontenery sekwencyjne (vector, list ) są przeznaczone do sekwencyjnego i swobodnego dostępu do elementów za pomocą indeksu lub odpowiedniego operatora. W standardowej bibliotece STL (ang. Standard Template Library) znajdują się oprócz nich tzw. kontenery asocjacyjne. Zapewniają one szybki swobodny dostęp do elementów przy pomocy kluczy. Są to: map, multimap, set i muiltiset. Następujący przykład pokazuje zastosowanie kontenera map: 2016-01-08 Bazy danych-1 W5 21
2016-01-08 Bazy danych-1 W5 22
2016-01-08 Bazy danych-1 W5 23
2016-01-08 Bazy danych-1 W5 24
2016-01-08 Bazy danych-1 W5 25
2016-01-08 Bazy danych-1 W5 26