Szablon klasy std::list

Podobne dokumenty
Szablon klasy std::vector

Lista dwukierunkowa - przykład implementacji destruktorów

Wprowadzenie do szablonów szablony funkcji

Wyliczanie wyrażenia obiekty tymczasowe

Wprowadzenie do szablonów szablony funkcji

Referencje do zmiennych i obiektów

Wartości domyślne, przeciażenia funkcji

Wartości domyślne, przeciażenia funkcji

Konstruktor kopiujacy

Operacje wejścia/wyjścia (odsłona druga) - pliki

Pola i metody statyczne

Klasa, metody, rozwijanie w linii

Klasa, metody, rozwijanie w linii

Szablony funkcji i szablony klas

Operacje wejścia/wyjścia odsłona pierwsza

Rzutowanie i konwersje

Wprowadzenie do szablonów klas

Przesłanianie nazw, przestrzenie nazw

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

Paradygmaty programowania. Paradygmaty programowania

Programowanie 2. Język C++. Wykład 3.

PARADYGMATY PROGRAMOWANIA Wykład 3

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

Język C++ wykład VI. uzupełnienie notatek: dr Jerzy Białkowski. Programowanie C/C++ Język C++ wykład VI. dr Jarosław Mederski.

Obiekty i metody stałe

Style programowania - krótki przeglad

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

Programowanie w C++ Wykład 13. Katarzyna Grzelak. 4 czerwca K.Grzelak (Wykład 13) Programowanie w C++ 1 / 26

Geneza powstania języka C++

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

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

Przykład implementacji przeciażeń operatorów problem kolizji

Programowanie w C++ Wykład 11. Katarzyna Grzelak. 13 maja K.Grzelak (Wykład 11) Programowanie w C++ 1 / 30

Geneza powstania języka C++

Style programowania - krótki przeglad

Wyjątki. Wyjątki. Bogdan Kreczmer. Katedra Cybernetyki i Robotyki Politechnika Wrocławska

Programowanie w języku C++

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

Wstęp do Programowania 2

Qt sygnały i sloty. Bogdan Kreczmer. Katedra Cybernetyki i Robotyki Wydział Elektroniki Politechnika Wrocławska

Język C++ wykład VIII

Przykład zastosowania przeciażeń operatorów i metod stałych - szukanie punktu przecięcia z wielobokiem

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

Zaawansowane programowanie w C++ (PCP)

Wprowadzenie do programowanie obiektowego w języku C++

Wprowadzenie do UML, przykład użycia kolizja

Plik klasy. h deklaracje klas

Paradygmaty programowania

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

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

Kurs programowania. Wykład 1. Wojciech Macyna. 3 marca 2016

1. Wartość, jaką odczytuje się z obszaru przydzielonego obiektowi to: a) I - wartość b) definicja obiektu c) typ oboektu d) p - wartość

Programowanie i struktury danych

Do czego służą klasy?

Programowanie Obiektowe i C++

Diagramy UML, przykład problemu kolizji

Programowanie Obiektowew języku C++ Zadania L4

Dziedziczenie i poliformizm

Dziedziczenie. Ogólna postać dziedziczenia klas:

Instrukcja do pracowni specjalistycznej z przedmiotu. Obiektowe programowanie aplikacji

Hermetyzacja oraz pola i metody statyczne

Qt - dialogi. Bogdan Kreczmer. ZPCiR ICT PWR pokój 307 budynek C3

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

Programowanie i struktury danych

Aplikacja po polsku. Bogdan Kreczmer. ZPCiR ICT PWr pokój 307 budynek C3.

Programowanie obiektowe w C++ Wykład 12

Programowanie, część I

STL: Lekcja 1&2. Filozofia STL

ATD. Wykład 8. Programowanie (język C++) abstrakcyjny typ danych. Abstrakcyjne typy danych (ATD) Metody czysto wirtualne. Definicje i uwagi:

Podstawy języka C++ Maciej Trzebiński. Instytut Fizyki Jądrowej Polskiej Akademii Nauk. Praktyki studenckie na LHC IVedycja,2016r.

KLASA UCZEN Uczen imię, nazwisko, średnia konstruktor konstruktor Ustaw Wyswietl Lepszy Promowany

Programowanie obiektowe, wykład nr 7. Przegląd typów strukturalnych - klasy i obiekty - c.d.

Język C++ wykład VII. uzupełnienie notatek: dr Jerzy Białkowski. Programowanie C/C++ Język C++ wykład VII. dr Jarosław Mederski. Spis.

Podejście obiektowe - podstawowe pojęcia

Wykład 1. Program przedmiotu. Programowanie Obiektowe (język C++) Literatura. Program przedmiotu c.d.:

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

wykład IV uzupełnienie notatek: dr Jerzy Białkowski Programowanie C/C++ Język C, a C++. wykład IV dr Jarosław Mederski Spis Język C++ - wstęp

Wartości domyślne, szablony funkcji i klas

Zaawansowane programowanie w C++ (PCP)

KLASA UCZEN Uczen imię, nazwisko, średnia konstruktor konstruktor Ustaw Wyswietl Lepszy Promowany

Jak Windows zarządza pamięcią?

Qt sygnały i designer

Przestrzenie nazw. Bogdan Kreczmer. Katedra Cybernetyki i Robotyki Politechnika Wrocławska

PARADYGMATY PROGRAMOWANIA Wykład 2

Programowanie w C++ Wykład 14. Katarzyna Grzelak. 3 czerwca K.Grzelak (Wykład 14) Programowanie w C++ 1 / 27

Kurs programowania. Wykład 2. Wojciech Macyna. 17 marca 2016

STL Standardt Template Library (wprowadzenie)

Podstawy programowania w języku C++ Zadania - dziedziczenie i polimorfizm

Praca z aplikacją designer

wykład V uzupełnienie notatek: dr Jerzy Białkowski Programowanie C/C++ Język C++ klasy i obiekty wykład V dr Jarosław Mederski Spis Język C++ - klasy

Zaawansowane programowanie w języku C++ Programowanie obiektowe

PARADYGMATY PROGRAMOWANIA Wykład 4

Podstawy programowania w języku C++

Algorytmy i Struktury Danych. Anna Paszyńska

Zaawansowane programowanie w C++ (PCP)

Wykład V. Programowanie II - semestr II Kierunek Informatyka. dr inż. Janusz Słupik. Wydział Matematyki Stosowanej Politechniki Śląskiej

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

Zaawansowane programowanie w C++ (PCP)

KLASY cz.1. Dorota Pylak

Transkrypt:

Szablon klasy std::list Bogdan Kreczmer ZPCiR IIAiR PWr pokój 307 budynek C3 bogdan.kreczmer@pwr.wroc.pl Copyright c 2006 2010 Bogdan Kreczmer Niniejszy dokument zawiera materiały do wykładu na temat programowania obiektowego. Jest on udostępniony pod warunkiem wykorzystania wyłacznie do własnych prywatnych potrzeb i może on być kopiowany wyłacznie w całości, razem z niniejsza strona tytułowa.

Szablon klasy standardowej list lst.front( ) zwraca pierwszy element, lst.back( ) zwraca ostatni element, lst.push front(e) dodaje na poczatek kopię elementu e, lst.pop front( ) usuwa pierwszy element i nie zwraca go, lst.push back(e) dodaje na koniec kopię elementu e, lst.pop back( ) usuwa ostatni element i nie zwraca go, lst.size( ) zwraca aktualna liczbę elementów, lst.max size( ) zwraca największa możliwa ilość elementów jaka można zaalokować, Copyright c 2006 2010 Bogdan Kreczmer Szablon klasy std::list 1

Szablon klasy standardowej list lst.begin( ) zwraca iterator wskazujacy na pierwszy element, lst.end( ) zwraca iterator wskazujacy na pozycję za ostatnim elementem, lst.rbegin( ) zwraca iterator dla iteracji odwrotnej wskazujacy na ostatni element, lst.rend( ) zwraca iterator dla iteracji odwrotnej wskazujacy na pozycję przed pierwszym elementem, list<typ>::iterator typ iteratora mogacego wprowadzić zmiany w obiektach kolejki, list<typ>::const iterator typ iteratora nie mogacego wprowadzać zmian w obiektach kolejki. std::list<float> lst(6); for (std::list<float>::iterator iter = lst.begin(); iter!= lst.end(); ++iter) iter = 13; Copyright c 2006 2010 Bogdan Kreczmer Szablon klasy std::list 2

Wzorzec listy dwukierunkowej std::list class Atrapa { //............................................................................ public: Atrapa( Atrapa const & ) { cout << == Konstruktor kopiujacy\n ; Atrapa( ) { cout << ++ Konstruktor bezparametryczny\n ; Atrapa( ) { cout << -- Destruktor \n ; ; //.......................................................................................... int main( ) { list <Atrapa> Lst; Atrapa A; cout << ## Przed ########## << endl; Lst.push back(a); cout << ## Po ############# << endl; return 0; Wynik działania: ++ Konstruktor bezparametryczny ## Przed ########## == Konstruktor kopiujacy ## Po ############# Destruktor Destruktor Elementy przekazywane do listy sa kopiowane i ulegaja destrukcji wraz z danym elementem listy. Copyright c 2006 2010 Bogdan Kreczmer Szablon klasy std::list 3

Wzorzec listy dwukierunkowej std::list class Atrapa { //........................................................................... public: Atrapa( Atrapa const & ) { cout << == Konstruktor kopiujacy\n ; Atrapa( ) { cout << ++ Konstruktor bezparametryczny\n ; Atrapa( ) { cout << -- Destruktor \n ; ; //.......................................................................................... int main( ) { list <Atrapa > Lst; Atrapa A; cout << ## Przed ########## << endl; Lst.push back(&a); cout << ## Po ############# << endl; return 0; Wynik działania: ++ Konstruktor bezparametryczny ## Przed ########## ## Po ############# Destruktor Dla kolejki wskaźników na obiekty niszczenie elementów kolejki nie powoduje jednoczesnej destrukcji samych obiektów. Copyright c 2006 2010 Bogdan Kreczmer Szablon klasy std::list 4

Usuwanie elementu class Atrapa { //........................................................................... public: Atrapa( Atrapa const & ) { cout << == Konstruktor kopiujacy\n ; Atrapa( ) { cout << ++ Konstruktor bezparametryczny\n ; virtual Atrapa( ) { cout << -- Destruktor \n ; ; //......................................................................................... int main( ) { list <Atrapa> Lst; Atrapa A; cout << ## Przed ########## << endl; Lst.push back(a); delete &Lst.front(); cout << ## Po ############# << endl; return 0; Wynik działania: ++ Konstruktor bezparametryczny ## Przed ########## ++ Konstruktor kopiujacy Destruktor Segmentation fault ˆ ˆ ˆ ˆ ˆ ˆ ˆ ˆ ˆ ˆ ˆ ˆ ˆ ˆ ˆ ˆ ˆ ˆ Samodzielne usuwanie elementu kolejki nie jest dopuszczalne. Operacje te musza być realizowane za pośrednictwem zarzadcy. Copyright c 2006 2010 Bogdan Kreczmer Szablon klasy std::list 5

Przegladanie listy struct Atrapa { //................................................................................ int Numer; ; //.............................................................................................. int main( ) { list <Atrapa> Lst; Lst.push back(atrapa( )); Lst.push back(atrapa( )); // Tworzymy listę dwuelementowa for (list<atrapa>::iterator Iter = Lst.begin( ); Iter!= Lst.end( ); ++Iter) { ( Iter). Numer = 5; // Do tego elementu listy możemy odwołać się przez referencję Iter > Numer = 10; // lub wskaźnik. if (( Iter). Numer == 10) cout << "!!! Ten warunek jest spełniony." << endl; Iterator zapewnia bezpieczny dostęp do wszystkich elementów listy. Postać warunku końca listy jest istotna, sposób inkrementacji operatora również. Copyright c 2006 2010 Bogdan Kreczmer Szablon klasy std::list 6

Operacje na listach struct ProstaKlasa { //........................................................................... int Numer; bool operator < (ProstaKlasa const &Arg2) { return Numer < Arg2. Numer; ProstaKlasa( int Num=0 ): Numer(Num) { ; //............................................................................................... int main( ) { list <ProstaKlasa> Lst; Lst.push front(prostaklasa(5)); Lst.push front(prostaklasa(2)); Lst.push front(prostaklasa(7)); Lst.sort(); // Sortowanie zgodnie z operatorem < Lst.reverse(); // Odwrócenie porzadku while (!Lst.empty()) { cout << Lst.front(). Numer << endl; Lst.pop front(); // Usuwamy pierwszy element Copyright c 2006 2010 Bogdan Kreczmer Szablon klasy std::list 7

Wykorzystanie listy struct Wektor 2f: public vector<float> { //....................................................... float & x, & y; Wektor 2f( float x, float y ): vector<float>(2), x(( this )[0]), y(( this )[1]) { x = x; y = y; ; //............................................................................................... int main( ) { list<wektor 2f> ObWielobok; ObWielobok.push back(wektor 2f(3,5)); ObWielobok.push back(wektor 2f(7,2)); ObWielobok.push back(wektor 2f(5,10)); // Przegladanie w porzadku odwrotnym z możliwościa zmian. for (list<wektor 2f>::reverse iterator Iter = ObWielobok.rbegin(); Iter!= ObWielobok.rend(); ++Iter ) {... // Przegladanie w porzadku odwrotnym bez możliwości zmian. for (list<wektor 2f>::const reverse iterator CIter = ObWielobok.rbegin(); CIter!= ( (const list<wektor 2f > )&ObWielobok).rend(); ++CIter ) {... Copyright c 2006 2010 Bogdan Kreczmer Szablon klasy std::list 8

Diagram klas dla przykładu z wielobokiem Diagram nie musi prezentować wszystkich zależności i szczegółów szablonów lub klas. Wystarcza te na których chcemy skoncentorawać swoja uwagę. Copyright c 2006 2010 Bogdan Kreczmer Szablon klasy std::list 9

Przykład zastosowania ograniczeń Ograniczenia i zwiazki moga zachodzić między różnymi klasami, jak też moga one istnieć w obrębie jednej klasy. Copyright c 2006 2010 Bogdan Kreczmer Szablon klasy std::list 10

Pytania i ćwiczenia 1. Dany jest fragment kodu: list< vector< double>> Lst(5); Lst.back()[1] = 5; (a) Czy prawda jest, że powyższa instrukcja modyfikuje druga współrzędna wektora, który jest piatym elementem niniejszej listy? (b) Jeżeli następnym w kolejności jest polecenie: Lst.front().at(0) = 5; to jakim wynikiem się ono zakończy? 2. Dla jakich przypadków spełniona jest równość: Lst.begin() == Lst.rend() 3. Dany jest fragment kodu: list<double> Lst(5); double &Zm = Lst.back(); Zm = 5; Lst.push front(lst.back()); Lst.pop back(); Zm = 9; (a) Jaka wartość będzie miał pierwszy element kolejki? (b) Czy przedstawiony fragment programu może spowodować bład krytyczny działania programu? Jeśli tak, to dlaczego? Copyright c 2006 2010 Bogdan Kreczmer Szablon klasy std::list 11