obiekty funkcyjne - funktory

Podobne dokumenty
Język C++ wykład VIII

Programowanie obiektowe

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

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

Operatory na rzecz typu TString

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

Dziedziczenie & W slajdach są materiały zapożyczone z

Paradygmaty programowania

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

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

Programowanie i struktury danych

EGZAMIN 2 (14 WRZEŚNIA 2015) JĘZYK C++

Zaawansowane programowanie w języku C++ Biblioteka standardowa

Wstęp do Programowania 2

Programowanie obiektowe - Przykładowe zadania egzaminacyjne (2005/2006)

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

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

Metody i języki programowania II

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

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

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

Jzyk C++ cz 3. Jarosław Gramacki Instytut Informatyki i Elektroniki ( $)*)+' *, - ( ' )*'.' '',*/ *, ','*0) 1 / ) %*+ 2'' 2" ( $%%) )'20 )*0) 1 / )

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.

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

STL: implementowanie algorytmów. STL: implementowanie algorytmów. STL: implementowanie algorytmów. STL: implementowanie algorytmów

Biblioteka standardowa C++

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

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

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

Algorytmy i Struktury Danych.

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

Wprowadzenie do szablonów szablony funkcji

Środowisko programistyczne GEANT4

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

Kurs programowania. Wykład 9. Wojciech Macyna

Szablony funkcji i szablony klas

Wprowadzenie do szablonów szablony funkcji

Szablon klasy std::vector

Zajęcia nr 4 Programowanie obiektowe konstruktory. dr inż. Łukasz Graczykowski mgr inż. Leszek Kosarzewski Wydział Fizyki Politechniki Warszawskiej

Wzorce funkcji (szablony)

Ćwiczenia IV - Kontenery (pojemniki)

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

Programowanie Obiektowew języku C++ Zadania L9

Projektowanie klas c.d. Projektowanie klas przykład

Zaawansowane programowanie w C++ (PCP)

Algorytmy, iteratory, kolekcje niestandardowe

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

Signals + Threads: Qt vs. Boost

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

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

2.4 Dziedziczenie. 2.4 Dziedziczenie Przykłady programowania w C - kurs podstawowy

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

Programowanie Obiektowew języku C++ Zadania L4

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

C++11. C++ 11 wybrane elementy. C++11: referencje do rvalue C++ 11: C++11: referencje do rvalue. C++11: referencje do rvalue. Referencje do rvalue

Programowanie Komponentowe Zarządzanie obiektami: kontenery

Wstęp do programowania obiektowego. Przekazywanie parametrów do funkcji w C++ Metody i funkcje operatorowe Strumienie: standardowe, plikowe, napisowe

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

Programowanie w językach

C++11. C++ 11 wybrane elementy. C++11: referencje do rvalue C++ 11: C++11: referencje do rvalue. C++11: referencje do rvalue. Referencje do rvalue

Programowanie i struktury danych

TEMAT : KLASY POLIMORFIZM

C++11: szablony zewnętrzne C++ 11: C++11: szablony zewnętrzne. C++11: szablony zewnętrzne. C++11: szablony zewnętrzne C++ 11: Szablony zewnętrzne

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

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

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

Rzutowanie i konwersje

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

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

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

Programowanie obiektowe w języku C++ Zarządzanie procesami. dr inż. Jarosław Forenc. Przeładowanie (przeciążanie) operatorów

Zaawansowane programowanie w C++ (PCP)

KLASY cz4. Dorota Pylak. destruktory składowe statyczne przeciążanie operatorów. wskaźniki

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

Programowanie w C++ Wykład 8. Katarzyna Grzelak. 15 kwietnia K.Grzelak (Wykład 8) Programowanie w C++ 1 / 33

Wejście wyjście strumieniowe

C++ - szablony. C++ - szablony. C++ - szablony. C++ - szablony. C++ - szablony. C++ - szablony

STL: kontenery C++: STL: kontenery. STL: kontenery. STL: kontenery. STL: kontenery. Fabryka obiektów. Fabryka obiektów

1. Mamy definicje czterech klas: class A1 {public: A1() {cout<<"a1";}}; class A2 : private A1 {public: A2() {cout<<"a2";}}; class A3 {public: A3()

STL: Lekcja 1&2. Filozofia STL

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

Technologie cyfrowe semestr letni 2018/2019

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

Wprowadzenie do programowania i programowanie obiektowe

Curiously recurring template pattern

Wyjątki (exceptions)

Biblioteka obiektowa C++ klasa string - parę przykładów programów Opracowanie: dr hab. Mirosław R. Dudek, prof. UZ

Podstawy informatyki. Informatyka stosowana - studia niestacjonarne. Grzegorz Smyk. Wydział Inżynierii Metali i Informatyki Przemysłowej

Programowanie Obiektowew języku C++ Zadania L8

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

Pliki wykład 2. Dorota Pylak

C++ - [3-5] Pliki i strumienie w C++

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

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

Spis treści OBSŁUGA PLIKÓW W JĘZYKU C++ Informatyka 2. Instrukcja do pracowni specjalistycznej z przedmiotu. Numer ćwiczenia INF32

Mechanizm dziedziczenia

Technologie cyfrowe semestr letni 2018/2019

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

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

Transkrypt:

#include <iostream> #include <fstream> #include <functional> #include <algorithm> #include <list> #include <vector> #include <map> #include <iterator> #include <string> #include <cstring> using namespace std; using std::placeholders::_1; // do przykładu *8* //using std::placeholders::_2; obiekty funkcyjne - funktory int main() { // *1* ------------------------------------ plus<float> p; negate<double> n; greater<char> g; logical_and<int> a; cout << p(3.14, 4.375) << ' ' << n(-1.23) << ' ' << g('z', 'a') << ' ' << a(1, 0) << endl; // 7.515 1.23 1 0

obiekty funkcyjne, wyrażenie lambda // *2* ------------------------------------ przed programem struct mniej_niz { mniej_niz(int x_) : x(x_) { bool operator () (int y) const { return y < x; private: int x; // *2* ------------------------------------ w programie list<int> l = { 11, 2, 13, 1, 7, 9, -1 l.sort( greater<int>() ); ostream_iterator<int> out(cout, " "); copy(l.begin(), l.end(), out); // 13 11 9 7 2 1-1 //l.remove_if(mniej_niz(7)); //l.remove_if( []( int i ){ return i<7; ); int minval = 0, maxval = 7; l.remove_if( [ minval, maxval ]( int i ){ cout << "min max "<<minval<<"," <<maxval<<","<<i<<endl; return i>minval && i<maxval ; ); copy(l.begin(), l.end(), out); // 13 11 9 7-1

kontener para - wczytywanie // *3* ------------------------------------ przed programem struct pair_si { int first; string second; bool operator < (const pair_si& p) const { return first == p.first? second < p.second : first < p.first; istream& operator >> (istream& ifs, pair_si& s) { static int licznik = 0; s.first = ++licznik; return ifs >> s.second; // *3* ------------------------------------ w programie typedef istream_iterator<pair_si> is; ifstream file("test.txt"); if (!file) return -1; list<pair_si> w; copy(is(file), is(), back_inserter(w));

para w liście uniwersalny sposób na wysłanie do strumienia // *4* ------------------------------------ przed programem template<typename T> struct output_pair { output_pair(ostream& o, string e = "") : strumien(o), koniec(e) { void operator () (const T& p) { strumien << p.first << '\t' << p.second << koniec; private: ostream& strumien; string koniec; template <typename T> void view(t con) { for_each(con.begin(), con.end(), output_pair<typename T::value_type>(cout, " ")); // value_type - typ przechowywanego obiektu // *4* ------------------------------------ w programie view(w);

obiekty funkcyjne vs wyrażenie lambda usuwanie // *5* ------------------------------------ przed programem class ffoe { public: ffoe(const string& e) : extra(e) { pair_si& operator () (pair_si& w) { string::size_type p; while ((p = w.second.find_first_of(extra))!= string::npos) w.second.erase(p, 1); return w; protected: string extra; // *5* ------------------------------------ w programie transform(w.begin(), w.end(), w.begin(), ffoe("y")); view( w ); vector<int> v5 = { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 transform( v5.begin(), v5.end(), v5.begin(), [](int i)->int { cout << "kwadrat z "<<i<<" = "<<i*i<<endl; return i*i; );

// *6* ------------------------------------ przed programem class ssort { public: bool operator () (const pair_si& l, const pair_si& r) { return l.second < r.second; // *6* ------------------------------------ w programie w.sort( ssort() ); w.sort( [] (const pair_si& p1, const pair_si& p2) { return p1.first > p2.first; ); view(w); obiekty funkcyjne vs wyrażenie lambda sortowanie

obiekty funkcyjne sortowanie: zadanie Proszę napisać: a) obiekt funkcyjny lub b) wyrażenie lambda za pomocą których posortowane będą obiekty klasy Kot (jak poniżej) według kryterium od najdłuższej nazwy (w sensie liczby liter w nazwie) do najkrótszej, umieszczone w wektorze. Jeśli długość nazwy jest ta sama, sortować wg ogólnych reguł bez uwzględniania wielkości liter. class Kot { string nazwa; public: Kot( const char* n ) : nazwa(n) { // w klasie dopisać co trzeba vector<kot> v { "Jaga", "Badyl", "Kicia", "Mruczek", "Alfred", "Bazyli" Wynik sortowania wypisać na ekran (można dopisać jakąś metodę dostępową w klasie lub przeciążyć operator<< dla typu Kot).

// *7* ------------------------------------ przed programem typedef map<string, int> stat_map; class stat { public: stat(stat_map& msi_) : msi(msi_) { void operator () (const pair_si& s) { msi[s.second]++; protected: stat_map& msi; // *7* ------------------------------------ w programie stat_map st; for_each(w.begin(), w.end(), stat(st)); view(st); obiekty funkcyjne przepisywanie do mapy

// *8* ------------------------------------ w programie ostream_iterator<int> os(cout, " "); list<int> l2 = {11, 2, 13, 1, -7, 9, -1 // l2.remove_if(bind1st(less<int>(), 1)); l2.remove_if( bind( less<int>(), _1, 1 ) ); // l2.remove_if(bind2nd(less<int>(), 1)); // l2.remove_if( [](int i){ return i<1; ); copy( l2.begin(), l2.end(), os ); // 11 2 13 1 9 obiekty funkcyjne

obiekty funkcyjne // *9* ------------------------------------ przed programem struct mniej_niz2 : public unary_function <int, bool> { mniej_niz2 ( int x_ ) : x ( x_ ) { bool operator () (int y) const { return y < x; private: int x; // *9* ------------------------------------ w programie l2.remove_if( mniej_niz2(5) ); copy(l2.begin(), l2.end(), os); // 13 11 9 l2.remove_if( not1( mniej_niz2(10) ) ); copy( l2.begin(), l2.end(), os ); // 9

obiekty funkcyjne // *10* ------------------------------------ przed programem class E { public: E(int e) : e_(e) { template<typename T> void foo() { cout << e_; struct pointer { void bar() const { cout << 10+e_; T* operator() (T& t) { return &t; private: int e_; // *10* ------------------------------------ w programie E t3[] = {9, 1, 8, 2, 7, 3, 6, 4, 5, 0 // for_each(t3, t3+10, mem_fun_ref(&e::foo)); // 9182736450 for_each(t3, t3+10, bind(&e::foo,_1)); // 9182736450 list<const E*> l3; transform(t3, t3+10, back_inserter(l3), pointer<e>()); //for_each(l3.begin(), l3.end(), mem_fun(&e::bar)); // 19111812171316141510 for_each(l3.begin(), l3.end(), bind(&e::bar,_1)); // 19111812171316141510