Programowanie Komponentowe Zarządzanie obiektami: kontenery

Podobne dokumenty
Struktury Danych i Złożoność Obliczeniowa

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

Programowanie i struktury danych

STL: Lekcja 1&2. Filozofia STL

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

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

Zaawansowane programowanie w języku C++ Biblioteka standardowa

Kontenery i iteratory. Wykorzystanie kontenerów w praktyce.

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

Paradygmaty programowania

STL Standardt Template Library (wprowadzenie)

Składnia C++ Programowanie Obiektowe Mateusz Cicheński

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

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

Programowanie Równoległe wykład 12. Thrust C Maciej Matyka Instytut Fizyki Teoretycznej

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

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

Jak Windows zarządza pamięcią?

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

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

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

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

Programowanie i struktury danych

Składnia C++ Programowanie Obiektowe Mateusz Cicheński

Szablony klas, zastosowanie szablonów w programach

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.

obiekty funkcyjne - funktory

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

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

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

Biblioteka standardowa C++

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

Algorytmy i Struktury Danych. Anna Paszyńska

Języki i techniki programowania Ćwiczenia 2

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

Programowanie, część I

STL Standard Template Library

Język C++ wykład VIII

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

Wprowadzenie do szablonów szablony funkcji

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

Kolekcje. Na podstawie:

public: // interfejs private: // implementacja // składowe klasy protected: // póki nie będziemy dziedziczyć, // to pole nas nie interesuje

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

Wprowadzenie do szablonów szablony funkcji

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

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

Programowanie Obiektowo Zorientowane w języku c++ Przestrzenie nazw

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

Lista, Stos, Kolejka, Tablica Asocjacyjna

Szablon klasy std::vector

Algorytmy i Struktury Danych.

Wstęp do programowania obiektowego. WYKŁAD 3 Dziedziczenie Pola i funkcje statyczne Funkcje zaprzyjaźnione, this

Kurs programowania. Wykład 9. Wojciech Macyna

Szablony funkcji i szablony klas

Kolekcja (kontener) to po prostu obiekt, który grupuje wiele elementów w jeden twór.

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

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

Laboratorium z przedmiotu Programowanie obiektowe - zestaw 04

Programowanie Komponentowe WebAPI

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

6 Niektóre nowe cechy standardu C++11

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

java.util.* :Kolekcje Tomasz Borzyszkowski

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

Wstęp do programowania

Opisy efektów kształcenia dla modułu

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

Wskaźniki w C. Anna Gogolińska

Kolekcje - pakiet Java Collections Framework

Tworzenie aplikacji w języku Java

Podstawy programowania skrót z wykładów:

Operatory na rzecz typu TString

Wstęp do Programowania 2

Kompletna dokumentacja kontenera C++ vector w -

Wskaźnik może wskazywać na jakąś zmienną, strukturę, tablicę a nawet funkcję. Oto podstawowe operatory niezbędne do operowania wskaźnikami:

Przeciążanie operatorów

1. Które składowe klasa posiada zawsze, niezależnie od tego czy je zdefiniujemy, czy nie?

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

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

Projektowanie klas c.d. Projektowanie klas przykład

Programowanie. Sylwester Arabas. prowadzący ćwiczenia: Magdalena Kuich, Krzysztof Piasecki, Łukasz Dulny. Wydział Fizyki Uniwersytetu Warszawskiego

Programowanie i projektowanie obiektowe

Zaawansowane programowanie w C++ (PCP)

Szablony. Szablony funkcji

Zaawansowane programowanie w języku C++ Wyjątki

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

C++ - klasy. C++ - klasy. C++ - klasy. C++ - klasy. C++ - klasy WSKAŹNIKI KLASOWE

Zaawansowane programowanie w języku C++ Funkcje uogólnione - wzorce

Wstęp do Programowania 2

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

Prof. Danuta Makowiec Instytut Fizyki Teoretycznej i Astrofizyki pok. 353, tel danuta.makowiec at gmail.com

Zaawansowane programowanie w C++ (PCP)

Szablony funkcji i klas (templates)

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

Konstruktory. Streszczenie Celem wykładu jest zaprezentowanie konstruktorów w Javie, syntaktyki oraz zalet ich stosowania. Czas wykładu 45 minut.

Podstawy informatyki. Informatyka stosowana - studia niestacjonarne. Grzegorz Smyk

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

Algorytmika i programowanie. Wykład 2 inż. Barbara Fryc Wyższa Szkoła Informatyki i Zarządzania w Rzeszowie

Realizacja ekstensji klasy. Paulina Strzelecka, Tomasz Roszkowski

Transkrypt:

Programowanie Komponentowe Zarządzanie obiektami: kontenery dr inż. Ireneusz Szcześniak jesień 2016 roku

Kontenery Kontener w C++ to generyczna struktura danych. Przechowuje elementy jednego dowolnego typu. Nie pozwala na mieszanie przechowywanych typów. Kontenery przechowują elementy przez wartość. Części komplementarne: iterator, algorytm. Kontenery są implementowane przez klasy szablonowe. slajd 2

Historia Kiedyś (początek lat 90.): nowość, kierunek badań naukowych, implementacja jako Standard Template Library (STL). Teraz: niezbędne narzędzie, w bibliotece standardowej od C++98. Nie ma wymówki: trzeba używać. Ale szasami trzeba użyć czegoś innego w starym (legacy) kodzie. slajd 3

Typy kontenerów std::vector<t> - wektor: ciągłość w pamięci std::list<t> - lista, bez operatora swobodnego dostępu std::deque<t> - tablica, bez ciągłości w pamięci std::map<k, V> - tablica asocjacyjna (inaczej słownik) std::multimap<k, V> - słownik, klucze zduplikowane std::set<t> - zbiór std::multiset<t> - zbiór, klucze zduplikowane std::priority_queue<t> - kolejka priorytetowa Kontenery mogą być zagnieżdżane: T może być kontenerem. slajd 4

Typy kontenerów - wady i zalety std::vector<t> - najlepszy, jeżeli potrzebujemy swobodnego dostępu (operator []), ale rzadko zmieniamy rozmiar wektora, wstawiamy albo usuwamy elementy. Jest to po prostu tablica, którą możemy swobodnie i wygodnie zmieniać. std::list<t> - najlepsza, jeżeli często zmieniamy rozmiar, często dodajemy albo usuwamy elementy, wystarczy dostęp iteracyjny i nie jest nam potrzebny swobodny dostęp (nie ma operator []). std::deque<t> - najlepszy, jeżeli często zmianiamy rozmiar, często dodajemy albo usuwamy elementy, ale ciągle potrzebujemy szybkiego swobodnego dostępu (operator [] jest). slajd 5

Iteratory Pozwalają na dostęp do elementów kontenera. Implementacja: wskaźniki obudowane w klasy. Dla kontenera T, iterator to: T::iterator. Iterator const obiektów stałych: T::const_iterator. Używaj iteratora const, jeżeli nie modyfikujesz kontenera. Podstawowe operacje: ++i, i++. Podstawowe funkcje: T::begin(), T::end(). Różne funkcje (find, insert) zwracają iteratory. slajd 6

Iteratory odwrotne Pozwalają na iterację od końca po elementach kontenera. Typ: T::reverse_iterator i T::const_reverse_iterator Skomplikowane, bardzo trudne w użyciu i... dlatego nie mają większego znaczenia praktycznego. Przestroga: lepiej nie używać! slajd 7

Algorytmy Algorytmy dla różnych kontenerów: sortowanie elementów (lepszej implementacji nie znajdziecie), wyszukiwanie elementów, iterowanie po elementach, usuwanie i dodawanie elementów. Działają dla różnych kontenerów, bo kontenery mają ten sam interfejs: nazwy typów (np. T::data_value), nazwy funkcji (np. T::begin()). slajd 8

std::pair<a, B> #include <utility> Para p obiektów typów A i B: std::pair<a, B> p; p.first - pierwszy element, p.second - drugi element Globalna funkcja szablonowa std::make_pair pozwala na tworzenie pary bez podania typów, kompilator wywnioskuje typy sam: std::make_pair(1, "test"); Funkcja tie pozwala na wygodne przypisanie wartości z pary do osobnych zmiennych: std::tie(f, s) = p; Przeniesienie pary polega na przeniesieniu każdego z obiektów składowych. Ma zdefiniowane globalne operatory:!= < == > <= >= slajd 9

Obiekt funkcyjny Obiekt funkcyjny nazywany jest też funktorem. Obiekt klasy, w której zdefiniowany jest operator wywołania funkcji: operator() Ten operator musi być non-static i najlepiej const. Ten operator można przeciążyć na wiele sposobów, ale nas interesuje operator, który można wykorzystać do porównania obiektów pewnej klasy A, elementów kontenera: bool operator () (const A &a1, const A &a2) const; Kompilator będzie się starał wkompilować inline tę funkję. ZALETA: Obiektowi funkcyjnemu możemy podać dodatkowe dane w konstruktorze, potem używane w operatorze wywołania funkcji. slajd 10

Obiekt funkcyjny - przykład s t r u c t CMP { bool m_order ; CMP( bool o r d e r ) : m_order ( o r d e r ) {} bool operator ( ) ( const A &e1, const A &e2 ) const { } } ; bool s = e1. m_text < e2. m_text ; return m_order?! s : s ; slajd 11

Pętle iteracyjne po staremu #include <iostream> #include <vector> int main() { std::vector<int> a; a.push_back(1); a.push_back(2); a.push_back(3); for(std::vector<int>::iterator i = a.begin(); i!= a.end(); ++i) std::cout << *i << std::endl; } slajd 12

Pętle iteracyjne po nowemu #include <iostream> #include <vector> int main() { std::vector<int> a = {1, 2, 3}; for(const auto &e: a) std::cout << e << std::endl; } slajd 13

Podsumowanie Unikać implementacji własnych struktur danych! Używać biblioteki standardowej! Kontenery biblioteki standardowej pozwalają na tworzenie dowolnych struktur danych. Algorytmy standardowe lepsze od własnych tandetnych implementacji. slajd 14

Dziękuję za uwagę.