STL Standardt Template Library (wprowadzenie)

Podobne dokumenty
Wykład 5 Wybrane zagadnienia programowania w C++ (c.d.)

Programowanie i struktury danych

Zaawansowane programowanie w C++ (PCP)

Programowanie w C++ Wykład 7. Katarzyna Grzelak. 23 kwietnia K.Grzelak (Wykład 7) Programowanie w C++ 1 / 40

Techniki programowania INP001002Wl rok akademicki 2017/18 semestr letni. Wykład 5. Karol Tarnowski A-1 p.

Programowanie w C++ Wykład 6. Katarzyna Grzelak. 1 kwietnia K.Grzelak (Wykład 6) Programowanie w C++ 1 / 43

Techniki programowania INP001002Wl rok akademicki 2018/19 semestr letni. Wykład 5. Karol Tarnowski A-1 p.

2. Klasy cz. 2 - Konstruktor kopiujący. Pola tworzone statycznie i dynamicznie - Funkcje zaprzyjaźnione - Składowe statyczne

STL: Lekcja 1&2. Filozofia STL

Zaawansowane programowanie w języku C++ Biblioteka standardowa

Kontenery i iteratory. Wykorzystanie kontenerów w praktyce.

Algorytmy i Struktury Danych. Anna Paszyńska

Kompletna dokumentacja kontenera C++ vector w -

Szablony klas, zastosowanie szablonów w programach

Programowanie Komponentowe Zarządzanie obiektami: kontenery

Jak Windows zarządza pamięcią?

Dla każdej operacji łącznie tworzenia danych i zapisu ich do pliku przeprowadzić pomiar czasu wykonania polecenia. Wyniki przedstawić w tabelce.

Operatory na rzecz typu TString

10.1 Szablony Szablony funkcji Szablony klas Szablony jako wstęp do biblioteki STL... 10

Tabela wewnętrzna - definicja

Algorytmy i Struktury Danych.

Struktury Danych i Złożoność Obliczeniowa

Paradygmaty programowania

STL Standard Template Library

Język C++ wykład VIII

Programowanie Obiektowo Zorientowane w języku C++ Biblioteka STL

Aby uzyskać zaliczenie w pierwszym terminie (do 30 stycznia 2018) rozliczyć trzeba co najmniej 8 projektów, po 4 z każdej z części: C++ oraz Python.

Wykład 8: klasy cz. 4

STL Standard Template Library

java.util.* :Kolekcje Tomasz Borzyszkowski

Szablon klasy std::list

Zaawansowane programowanie w C++ (PCP)

Pojemniki Pojemnik to obiekt, którego zadaniem jest przechowywanie innych obiektów.

Paradygmaty programowania

Krótkie wprowadzenie do STL. XIV LO im. S. Staszica, K06 D

Programowanie obiektowe w C++ Wykład 11

W przypadku STL w specyfikacji nazwy pliku nagłówkowego brak rozszerzenia tj. <string> <string.h> zamiast

C++: STL. STL: kontenery. STL: kontenery. STL: kontenery. STL: kontenery. Programowanie Obiektowe C++: Standard Template Library

STL: kontenery. Typy kontenerów STL. STL: kontenery. STL: kontenery. STL: kontenery. Typy kontenerów STL. deque (double-ended queue) list

Dariusz Brzeziński. Politechnika Poznańska, Instytut Informatyki

Programowanie obiektowe C++

Lab 9 Podstawy Programowania

Biblioteka standardowa C++

PROE wykład 2 operacje na wskaźnikach. dr inż. Jacek Naruniec

Instrukcja do pracowni specjalistycznej z przedmiotu. Obiektowe programowanie aplikacji

Technologie programowania Wykład 4. Szablony funkcji Notes. Szablony funkcji Notes. Szablony funkcji Notes. Notes. Przemek Błaśkiewicz.

C++ Przeładowanie operatorów i wzorce w klasach

Język C++ część 9 szablony klas. Jarosław Gramacki Instytut Informatyki i Elektroniki. szablony funkcji

Przeciążenie operatorów

Obiektowy PHP. Czym jest obiekt? Definicja klasy. Składowe klasy pola i metody

C++ - szablony kontenerów. Kontenery i szablony kontenerów. C++ - szablony kontenerów. C++ - szablony kontenerów. C++ - szablony kontenerów

C++ - przeciążanie operatorów. C++ - przeciążanie operatorów. C++ - przeciążanie operatorów. C++ - przeciążanie operatorów

Programowanie w języku Java. Kolekcje

Programowanie i struktury danych. Wykład 4 Dr Piotr Cybula

Wykład 5: Klasy cz. 3

2. Tablice. Tablice jednowymiarowe - wektory. Algorytmy i Struktury Danych

Kolekcje - pakiet Java Collections Framework

Podstawy Programowania

IMIĘ i NAZWISKO: Pytania i (przykładowe) Odpowiedzi

Definicja szablonu klasy. Korzystanie z szablonu. Specjalizacja metody szablonu.

Przeciążanie operatorów

Kurs programowania. Wykład 9. Wojciech Macyna

Języki Programowania. Prowadząca: dr inż. Hanna Zbroszczyk. tel: Konsultacje: piątek:

Informatyka I. Wykład 4. Tablice. Dr inż. Andrzej Czerepicki. Politechnika Warszawska Wydział Transportu 2018

Wstęp do programowania obiektowego. STL - Standard Template Library

Programowanie komputerowe. Zajęcia 5

Wydajność użycia funktorów z biblioteką STL języka C++

Kurs programowania. Wykład 9. Wojciech Macyna. 28 kwiecień 2016

Automatyczne tworzenie operatora = Integer2& operator=(const Integer& prawy) { zdefiniuje. Integer::operator=(ri);

C++: STL. STL: kontenery. STL: kontenery. STL: kontenery. STL: kontenery. Programowanie Obiektowe C++: Standard Template Library.

Programowanie współbieżne Wykład 8 Podstawy programowania obiektowego. Iwona Kochaoska

Typy metod: konstruktory, destruktory, selektory, zapytania, iteratory.

Programowanie w C++ Wykład 6. Katarzyna Grzelak. kwiecień K.Grzelak (Wykład 6) Programowanie w C++ 1 / 40

Dariusz Brzeziński. Politechnika Poznańska, Instytut Informatyki

Wykład 3 Składnia języka C# (cz. 2)

> C++ dynamiczna alokacja/rezerwacja/przydział pamięci. Dane: Iwona Polak. Uniwersytet Śląski Instytut Informatyki

C++. Æwiczenia zaawansowane

JĘZYKI PROGRAMOWANIA Z PROGRAMOWANIEM OBIEKTOWYM. Wykład 12

Dynamiczny przydział pamięci w języku C. Dynamiczne struktury danych. dr inż. Jarosław Forenc. Metoda 1 (wektor N M-elementowy)

W2 Wprowadzenie do klas C++ Klasa najważniejsze pojęcie C++. To jest mechanizm do tworzenia obiektów. Deklaracje klasy :

Kolekcje - pakiet Java Collections Framework

Programowanie Obiektowe (Java)

Automatyczne tworzenie operatora = Integer2& operator=(const Integer& prawy) {

Wykład 4. Klasa List Kolejki Stosy Słowniki

Ada-95. Dariusz Wawrzyniak

Opisy efektów kształcenia dla modułu

Kolekcje. Na podstawie:

STL: kontenery. STL: kontenery. STL: kontenery. STL: kontenery. STL: kontenery. STL: kontenery

Java Collections Framework

Kontenery, algorytmy

Uwagi dotyczące notacji kodu! Moduły. Struktura modułu. Procedury. Opcje modułu (niektóre)

UML a kod w C++ i Javie. Przypadki użycia. Diagramy klas. Klasy użytkowników i wykorzystywane funkcje. Związki pomiędzy przypadkami.

Automatyczne tworzenie operatora = Integer2& operator=(const Integer& prawy) {

STL: kontenery. STL: kontenery. STL: kontenery. Typy kontenerów STL. STL: kontenery. STL: kontenery. multimap. Kontener map: przykład zadanie:

Zajęcia nr 5 Algorytmy i wskaźniki. dr inż. Łukasz Graczykowski mgr inż. Leszek Kosarzewski Wydział Fizyki Politechniki Warszawskiej

Programowanie w języku C++

Podstawy programowania. Podstawy C# Tablice

Programowanie w C++ Wykład 12. Katarzyna Grzelak. 28 maja K.Grzelak (Wykład 12) Programowanie w C++ 1 / 27

Język ludzki kod maszynowy

Techniki programowania INP001002Wl rok akademicki 2018/19 semestr letni. Wykład 3. Karol Tarnowski A-1 p.

Transkrypt:

STL Standardt Template Library (wprowadzenie) Biblioteka standardowych szablonów na dzień dzisiejszy stanowi jedną z najpotężniejszych możliwości języka C++ Zawiera szablony klas ogólnego przeznaczenia oraz funkcje implementujące Jądro STL składa się z kontenerów, algorytmów i iteratorów. Kontenery to są obiekty, przeznaczone do przechowywania innych obiektów, przy czym istnieje kilka rodzajów kontenerów. o vector zawiera definicje tablicy dynamicznej (podstawowy kontener) o deque kolejki (podstawowy kontener) o list listy (podstawowy kontener) o map kontener stowarzyszony (associative container) umożliwia efektywne pobranie wartości na podstawie kluczy (para klucz/wartość) Każda klasa kontenera zawiera definicje operujących na nim funkcji (dodawania elementu w koniec, pobierania elementu, wstawiania elementu i t. d.) 1

Algorytmy operują na kontenerach. Istnieją algorytmy dla inicjowania, sortowania, wyszukiwania i zamiany elementów klasy-kontenera, i t. d. Wiele algorytmów operuja na zakresach elementów wewnątrz kontenera. Iteratory to obiekty, pełniące w stosunku do obiektów role wskaźników. Umożliwiąją poruszanie się po zawartości kontenera w podobny sposób, w jaki wskaźniki pozwalają przemieszczać się w obrębie tablicy. Istnieje pięć rodzajów iteratorów: Iterator Random Access Iterator Bidirectional Iterator Forward Iterator Input Iterator Output Iterator Opis Zapis i odczyt wartości. Umożliwia dostęp do elementów w losowej (w dowolnej) kolejności Zapis i odczyt wartości. Umożliwia poruszanie się w przód i w tył w sposób sekwencyjny (inkrementowanie lub dekrementowanie). Zapis i odczyt wartości. Umożliwia poruszanie się tylko do przodu w sposób sekwencyjny. Tylko odczyt wartości. Poruszanie się tylko do przodu. Tylko zapis wartości. Poruszanie się tylko do przodu. 2

Uwaga! Analogicznie ze strumieniami I/O : Wejście to jest pobieranie danych z kontenera (odczyt) Wyjście to jest wyprowadzenie danych w kontener (zapis) Iterator o większych możliwościach może być używany zamiast iteratora o bardziej ograniczonej funkcjonalności. Na przykład, forward iterator może zastępować input iterator. Iteratory są obsługiwane tak samo, jak i wskaźniki. Możliwa jest ich inkrementacja/dekrementacja, operator pobrania wartości obiektu po iteratoru *(iter_val). Iteratory deklaruje się za pomocą typu iterator zdefiniowanego w różnych kontenerach. STL obsługuje także odwrotne iteratory (reverse iterators). Są to bidirectional iterators lub random access iterators, przemieszczające się w obrębie sekwencji w odwrotnym kierunku. Oznacza to, że inkrementacja iteratora odwrotnego, wskazującego na ostatni element sekwencji, spowoduje przejście do przedostatniego elementu. Przykład W19_0. 3

Oprócz kontenerów, algorytmów i iteratorów, STL zawiera szereg innych standardowych komponentów. Najważniejsze wśród nich to alokatory, predykaty i funkcje porównawcze. Alokatory. Dla każdego kontenera jest zdefiniowany alokator, który zarządza pamięcią, przydzieloną dla kontenera. Domyślny alokator to obiekt klasy allocator, ale programista może zdefiniować własny obiekt, jeśli wymaga tego specjalistyczna aplikacja. W większości wypadków domyślny alokator jest w pełni wystarczający. Niektóre algorytmy i kontenery wykorzystują specjalne funkcje zwane predykatami. Istnieją predykaty unarne (jednoargumentowe) i binarne (dwuargumentowe). Funkcje te zwracają wynik true lub false. Niektóre algorytmy i klasy używają specjalnych predykatów binarnych, służących do porównywania dwóch elementów. Typowe nagłówki STL: <vector>, <deque>, <algorithm>, <functional>, <utility> - patrz MSDN 4

Typy nazw klas kontenerów STL: size_type reference const_reference iterator const_iterator reverse_iterator const_reverse_iterator value_type allocator_type key_type key_compare value_compare size_t Referencja do elementu Referencja do elementu zadeklarowana jako const Iterator Iterator zadeklarowany jako const Iterator odwrotny Iterator odwrotny zadeklarowany jako const Typ wartości przechowywanej w kontenerze Typ alokatora Typ klucza Typ funkcji porównującej dwa klucze Typ funkcji porównującej dwie wartości 5

VECTOR Obsługuje tablicy dynamiczne mogą być powiększane w razie potrzeby. Specyfikacja szablonu dla klasy vector: template <class T, class Allocator=allocator<T>> class vector T typ przechowywanych danych, Allocator określa alokator, przy czym domyślną wartoścą jest alokator standardowy. Konstruktory: explicit vector(const Allocator &a=allocator()); //tworzy pusty vector //tworzy vector o num elementów o wartości val explicit vector(size_type num, const T &val = T(), const Allocator &a=allocator()); //tworzy vector zawierający takie same elementy jak ob vector(const vector<t, Allocator> &ob); 6

//tworzy wektor zawierający elementy z zakresu wyznaczonego przez //iteratory start i end template<clasiniter> vector(initer start, InIter end, const Allocator &a=allocator()); Każdy obiekt, który będzie przechowywany w kontenerze vector, musi mieć zdefiniowany domyślny konstruktor, a również w zależności od funkcjonalności: o konstruktor sparametryzowany o destruktor (jeśli trzeba zwolnić pamięć) o konstruktor kopii o operator = o operatory ==,!=, >, <, >=, <= Dla kontenera vector są zdefiniowane operatory: ==, <, <=,!=, >, >=, [ ] Do najczęściej stosowanych funkcji składowych należą: size(), begin(), end(), push_back(), insert(), erase(), clear() 7

size() begin() end() push_back( ) insert( ) erase( ) clear() Zwraca aktualną ilość elementów tablicy Zwraca iterator wskazujący początek wektora Zwraca iterator wskazujący koniec wektora (pierwszą wolną pozycje tablicy) Umieszcza wartość w pierwszej wolnej pozycji Dodawanie elementów w środku wektora Usuwanie elementów z tablicy Usuwanie wszystkich elementów z tablicy i dealokacja pamięci 8

Algorytmy <algorithm> Operują na kontenerach. Mimo że każdy kontener zapewnia obsługę podstawowych operacji, to algorytmy pozwalają wykonywać bardziej rozbudowane i złożone akcji. Umożliwiają także jednoczesne prace z dwoma kontenerami różnych typów. Wszystkie algorytmy są szablonami funkcji. Oznacza to że można ich stosować podczas pracy z dowolnym typem kontenera. Lista algorytmów jest podana w MSDN. Rozważmy kilka najbardziej popularnych algorytmów. Przykład W19_2 9