Zaawansowane programowanie w C++ (PCP)

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

STL Standardt Template Library (wprowadzenie)

STL: Lekcja 1&2. Filozofia STL

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

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

Programowanie i struktury danych

Zaawansowane programowanie w języku C++ Biblioteka standardowa

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

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

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

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

Kontenery i iteratory. Wykorzystanie kontenerów w praktyce.

Kontenery, algorytmy

Biblioteka standardowa C++

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

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

Szablon klasy std::vector

Algorytmy i Struktury Danych.

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

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

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

Jak Windows zarządza pamięcią?

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

Szablon klasy std::list

Kontenery. Wykład 12. Programowanie (język C++) Rodzaje kontenerów. Przegląd kontenerów

Biblioteka STL - wstęp. Biblioteka STL - literatura. Biblioteka STL - przegląd. Biblioteka STL - kwestie techniczne

Zaawansowane programowanie w C++ (PCP)

( rednio) zaawansowane programowanie w C++ (ZPR)

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

Język C++ wykład VIII

Programowanie komputerowe. Zajęcia 5

Standard C++0x (C++1x?) Marcin Świderski

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

Programowanie Komponentowe Zarządzanie obiektami: kontenery

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

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

Algorytmy i Struktury Danych. Anna Paszyńska

Zaawansowane programowanie w C++ (PCP)

Kompletna dokumentacja kontenera C++ vector w -

Listy i funkcje zaprzyjaźnione w C++

obiekty funkcyjne - funktory

Zaawansowane programowanie w C++ (PCP)

STL Standard Template Library

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

Struktury Danych i Złożoność Obliczeniowa

Algorytmy i Struktury Danych. Co dziś? Drzewo decyzyjne. Wykład IV Sortowania cd. Elementarne struktury danych

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

STL Standard Template Library

Programowanie w C++ z użyciem kontenerów - parę przykładów programów Opracowanie: dr hab. Mirosław R. Dudek, prof. UZ

Paradygmaty programowania

Kurs programowania. Wykład 9. Wojciech Macyna

Programowanie w języku Java. Kolekcje

Paradygmaty programowania. Paradygmaty programowania

Szablony klas, zastosowanie szablonów w programach

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

Algorytmy, iteratory, kolekcje niestandardowe

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

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

Java Collections Framework

Podstawy programowania w języku C++

Algorytmy i Struktury Danych.

Ćwiczenia IV - Kontenery (pojemniki)

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

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

Kolekcje - pakiet Java Collections Framework

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

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

Realizacja ekstensji klasy. Paulina Strzelecka, Tomasz Roszkowski

KOLEJKA (QUEUE) (lista fifo first in, first out)

Java niezbędnik programisty spotkanie nr 8. Kolekcje c.d.

STL: implementowanie algorytmów C++: STL. STL: implementowanie algorytmów. STL: implementowanie algorytmów. STL: implementowanie algorytmów

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

Laboratorium z przedmiotu Programowanie obiektowe - zestaw 04

Lista, Stos, Kolejka, Tablica Asocjacyjna

Operatory na rzecz typu TString

dr inż. Jarosław Forenc

Wykorzystanie elementów z biblioteki standardowej C++: vector, list, complex oraz string.

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

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

Lab 9 Podstawy Programowania

Kiedy potrzebne. Struktura (rekord) Struktura w języku C# Tablice struktur. struktura, kolekcja

Stos liczb całkowitych

Podstawy Programowania

Programowanie obiektowe C++

Kolekcje - pakiet Java Collections Framework

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

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

Szablony funkcji i szablony klas

WSTĘP DO INFORMATYKI. Struktury liniowe

Algorytmy i. Wykład 3: Stosy, kolejki i listy. Dr inż. Paweł Kasprowski. FIFO First In First Out (kolejka) LIFO Last In First Out (stos)

Programowanie w C++ Wykład 8. Katarzyna Grzelak. 7 maja K.Grzelak (Wykład 8) Programowanie w C++ 1 / 31

Spis treści. Wprowadzenie 15

Programowanie Obiektowe (Java)

Programowanie obiektowe w C++ Wykład 11

Opus Magnum C++11 : programowanie w języku C++. T. 2 / Jerzy Grębosz. Gliwice, cop Spis treści

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

BIBLIOTEKA STANDARDOWA C++

Klasa std::string. Bogdan Kreczmer. ZPCiR IIAiR PWr pokój 307 budynek C3.

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

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

Transkrypt:

Wykład 8 - biblioteka standardowa. Kolekcje i iteratory 27 kwietnia 2007

Powtórzenie - sprytne wskaźniki Zalety: upraszczają zarządzanie obiektami na stercie Wady: narzuty Sprytne wskaźniki dostępne w bibliotekach standardowych: boost::scoped_ptr std::auto_ptr boost::shared_ptr boost::weak_ptr boost::intrusive_ptr

Przegląd Wzorzec iteratora Lista kolekcji standardowych vector<t> jodnowymiarowa tablica list<t> lista dwukierunkowa deque<t> kolejka o dwu końcach queue<t> kolejka priority_queue<t> kolejka priorytetowa stack<t> stos set<t> zbiór map<t> tablica asocjacyjna (słownik) multiset<t> zbiór, wartość może występować wielokrotnie multimap<t> słownik, klucz może występować wielorotnie

Przegląd Wzorzec iteratora iteratory Iterator (forward iterator): dereferencja (dostęp do elementu) inkrementacja (wskazuje następny element) iterator wektor iterator lista

Przegląd Wzorzec iteratora iteratory przykład vector<int> v; //operacje na wektorze vector<int>::const_iterator ii = v.begin(); for(; ii!= v.end(); ++ii ) //*ii dostarcza element wskazywany przez iterator list<int> l; //operacje na liście list<int>::const_iterator ii = l.begin(); for(; ii!= l.end(); ++ii ) //*ii dostarcza element wskazywany przez iterator Używaj iteratorów do dostępu do elementów kolekcji

wektor lista dwukierunkowa inne std::vector Nagłówek: <vector> //Deklaracja template<class T, class A=allocator<T> > class std::vector; vector size capacity ptr 5 10

wektor lista dwukierunkowa inne vector - definicje typów value_type iterator const_iterator reverse_iterator const_reverse_iterator pointer, const_pointer reference, const_reference typ elementu iterator do elementów wektora iterator odwrotny wskaźnik do elementu referencja do elementu typedef vector<int> MyVector;//Definicja typu kolekcji MyVector v;//przykładowa kolekcja //utworzenie obiektu iteratora MyVector::const_iterator ii = v.begin();//ii jest iteratorem MyVector::value_type val = v[0]; //val ma typ taki jak element

wektor lista dwukierunkowa inne vector - dostęp do elementów Dostęp do elementu: reference operator[](size_type n); const_reference operator[](size_type n) const; reference at(size_type n); const_reference at(size_type n) const; reference front(); const reference front() const; reference back(); const reference back() const; bez kontroli kontrola zakresu pierwszy element ostatni element Informacje pomocnicze: size_type size() const; liczba elementów size_type capacity() const; liczba elementów dla których zaalokowano pamięć bool empty() const; bada czy size() == 0

wektor lista dwukierunkowa inne vector - konstruktory vector(); vector(size_type n, const T& val = T()); template<class In> vector(in first, In last); vector(const vector& v); vector& operator=(const vector& v); Przykłady: const int TAB[] = { 3, 2, 0, 8 }; const int TAB_SIZE = sizeof(tab)/sizeof(tab[0]); //kopiowanie zakresu vector<int> v(tab, TAB + TAB_SIZE); //Wypełnia stałą vector<int> v2(tab_size, 0); vector<int> v3 = v1;//konstruktor kopiujący pusty kontener n kopii val kopiuje zakres konstruktor kopiujący

wektor lista dwukierunkowa inne vector - przeglądanie kolejnych elementów iterator begin(); iterator end(); reverse_iterator rbegin(); reverse_iterator rend(); iterator do pierwszego elementu iter. do pierwszego za ostatnim iteratory dla odwrotnej kolejności begin end A B C D rbegin rend D C B A

wektor lista dwukierunkowa inne vector - dodawanie i usuwanie elementów void push_back(const T&); void pop_back(); iterator insert(iterator pos, const T& t); iterator erase(iterator pos); template<class In> void insert(iterator pos, In first, In last); iterator erase(iterator first, iterator last); void clear(); Inne funkcje: void vector::swap(vector& v); bool operator==(const vector&, const vector&); bool operator<(const vector&, const vector&); wstawia na koniec usuwa ostatni wstawia przed usuwa wstawia zakres usuwa usuwa wszystkie Specjalizacje: vector<bool>

wektor lista dwukierunkowa inne std::list Nagłówek: <list> //Deklaracja template<class T, class A=allocator<T> > class std::vector; list head tail

wektor lista dwukierunkowa inne operacje dla listy dwukierunkowej dostarcza operacji takich jak vector za wyjątkiem: dostępu swobodnego do elementów operatora indeksowania (operator[]) metody at() rezerwacji pamięci ( capacity(), reserve() ) Dodatkowe operacje: operacje na początku listy: reference front(); const_reference front() const; void push_front(const T&); void pop_front(); inne operacje: void remove(const T& val); //usuwa el. równe val void reverse(); //odwraca porządek elementów splice, merge, sort

wektor lista dwukierunkowa inne std::deque - kolejka o dwu końcach Nagłówek <deque> deque start end empty empty empty Operacje: takie jak dla wektora (za wyjątkiem capacity(), reserve() ) operacje z przodu ciągu (tak jak dla listy)

wektor lista dwukierunkowa inne Porównanie kolekcji sekwencyjnych indeksowanie insert, erase początek koniec tablica O(1) - - - vector O(1) O(n)+ - O(1)+ list - O(1) O(1) O(1) deque O(1) O(n) O(1) O(1) tablica - struktura odziedziczona po C wektor - optymalizacja przy dostępie przez indeks, rezerwowanie pamięci. lista - optymalne wstawianie i usuwanie elementów. deque - optymalne operacje na końcach, indeksowanie prawie tak optymalne jak w wektorze.

słownik inne kontenery asocjacyjne porówanie kolekcji sekwencyjnych i asocjacyjnych słownik Nagłówek: <map> //Deklaracja template<class K, class T, class Cmp = less<key>, class A = allocator<pair<const K, T> > > class std::map; map key value

słownik inne kontenery asocjacyjne porówanie kolekcji sekwencyjnych i asocjacyjnych map - definincje typów template<class K, class T, class Cmp = less<key>, class A = allocator<pair<const K, T> > > class std::map { public: typedef K key_type; typedef T data_type; typedef std::pair<const K, T> value_type; /*... */reference; /*... */const_reference; /*... */iterator; /*... */const_iterator; /*... */reverse_iterator; /*... */const_reverse_iterator; /* itd */

słownik inne kontenery asocjacyjne porówanie kolekcji sekwencyjnych i asocjacyjnych iteracja po słowniku iterator begin() iterator end() reverse_iterator rbegin() reverse_iterator rend() Uwaga Iterator dostarcza value_type, czyli std::pair<const K, T>. std::pair first second pierwszy element (tutaj klucz) drugi element (tutaj wartość)

słownik inne kontenery asocjacyjne porówanie kolekcji sekwencyjnych i asocjacyjnych map - konstruktory map(); pusty słownik map(const key_compare& cmp); j.w. + funkcja por. template<class In> map(in first, In last); kopiuje zakres map(const map& m); konstruktor kopiujący map& operator=(const map& m); //Przykłady

słownik inne kontenery asocjacyjne porówanie kolekcji sekwencyjnych i asocjacyjnych map - modyfikacja elementów pair<iterator,bool> insert(const value_type& x); iterator insert(it p, value_type& x); void erase(iterator pos); size_type erase(key_type& k); void clear(); wstawia j.w. p to sugestia usuwa usuwa dla klucza wszystkie elementy //Przykłady map<string,int> ks; typedef pair<string,int> P;//mozna uzyc map::value_type ks.insert( P( Abacki, 123456) ); ks.insert( P( Babacki, 234567) ); ks.insert( P( Cabacki, 346778) );

słownik inne kontenery asocjacyjne porówanie kolekcji sekwencyjnych i asocjacyjnych map - operacje słownikowe iterator find(const key_type& k); const_iterator find(const key_type& k); size_type count(const key_type& k) const; pair<iterator,iterator> equal_range(const key_type& k); pair<const_iterator, const_iterator> equal_range(const key_type& k) const; //Przykłady map<string,int> ks; /*... */ //dodaje elementy do słownika map<string,int>::const_iterator ii = ks.find( Abacki );

słownik inne kontenery asocjacyjne porówanie kolekcji sekwencyjnych i asocjacyjnych inne kontenery asocjacyjne set (zbiór) multimap multiset

słownik inne kontenery asocjacyjne porówanie kolekcji sekwencyjnych i asocjacyjnych Porównanie kolekcji indeksowanie insert, erase początek koniec tablica O(1) - - - vector O(1) O(n)+ - O(1)+ list - O(1) O(1) O(1) deque O(1) O(n) O(1) O(1) map O(log(n)) O(log(n)) - - set - O(log(n)) - -