Kurs języka C++ – wykład 13 ( )

Slides:



Advertisements
Podobne prezentacje
C++ wykład 2 ( ) Klasy i obiekty.
Advertisements

C# Platforma .NET CZ.3 Kuba Ostrowski.
Temat 2: Podstawy programowania Algorytmy – 1 z 2 _________________________________________________________________________________________________________________.
Tworzenie odwołania zewnętrznego (łącza) do zakresu komórek w innym skoroszycie Możliwości efektywnego stosowania odwołań zewnętrznych Odwołania zewnętrzne.
© Kazimierz Duzinkiewicz, dr hab. inż. Katedra Inżynierii Systemów Sterowania 1 Metody optymalizacji - Energetyka 2015/2016 Metody programowania liniowego.
Excel 2007 dla średniozaawansowanych zajęcia z dnia
Karolina Supera Michał Krajewski. Struktura w formie drzewa Funktor jest węzłem Składniki struktur są gałęziami W strukturze możemy zagnieżdżać inne struktury.
Funkcja liniowa Przygotował: Kajetan Leszczyński Niepubliczne Gimnazjum Przy Młodzieżowym Ośrodku Wychowawczym Księży Orionistów W Warszawie Ul. Barska.
Dodawania i odejmowanie sum algebraicznych. Mnożenie sumy algebraicznej przez jednomian. Opracowanie Joanna Szymańska Konsultacja Bożena Hołownia.
Algorytmy Informatyka Zakres rozszerzony
C++ WYKŁAD 13 ( ) Algorytmy. S PIS TREŚCI Funktory i predykaty Funkcje lambda.
 Jak zapanować nad ludzkimi uczuciami?.  To powodowana strachem reakcja emocjonalna, która pojawia się, gdy zablokowane jest jakieś dążenie i następuje.
Metody Analizy Danych Doświadczalnych Wykład 9 ”Estymacja parametryczna”
WYKŁAD 4. DR KRZYSZTOF JONAS Rachunkowość. Operacje gospodarcze. Każde zdarzenie, które nastąpiło w danym okresie i skutkuje zmianami w strukturze bądź.
Menu Jednomiany Wyrażenia algebraiczne -definicja Mnożenie i dzielenie sum algebraicznych przez jednomian Mnożenie sum algebraicznych Wzory skróconego.
Python. Języki Programistyczne Microcode Machine code Assembly Language (symboliczna reprezentacja machine code) Low-level Programming Language (FORTRAN,
Jak zaliczyć wykład: Dobrzy żołnierze, dobrzy aktorzy – kształtowanie swojego wizerunku w pracy? dr Aleksandra Spik.
I T P W ZPT 1 Realizacje funkcji boolowskich Omawiane do tej pory metody minimalizacji funkcji boolowskich związane są z reprezentacją funkcji w postaci.
Projektowanie systemów cyfrowych z wykorzystaniem języka VHDL Układy sekwencyjne.
Przykład 1: Określ liczbę pierwiastków równania (m-1)x 2 -2mx+m=0 w zależności od wartości parametru m. Aby określić liczbę pierwiastków równania, postępujemy.
API jądra do obsługi przestrzeni użytkownika Co jest tematem tej prezentacji: Transport danych pomiędzy przestrzeniami użytkownika i jądra (asm/uaccess.h)
Język Java Paweł Rajba
Dziedziczenie, polimorfizm, Interfejsy
PHP (wstęp) Personal Home Page Tools (PHP Tools)
Konstruowanie robotów z wykorzystaniem Vex IQ
Programowanie Obiektowe – Wykład 1
Kurs języka C++ – wykład 3 ( )
Schematy blokowe.
Kurs języka C++ – wykład 2 ( )
DEFINICJA I ZASTOSOWANIE W JĘZYKU HASKELL
MATEMATYCZNE MODELOWANIE PROCESÓW BIOTECHNOLOGICZNYCH
Rachunki zdań Tautologiczność funkcji
Akademia C# - Lab2 Zmienne, instrukcje warunkowe, pętle, debugger,
Kurs języka C++ – wykład 6 ( )
Rekursje Tak jak w innych językach funkcje mogą odwoływać się same do siebie Możemy regulować głębokość przed stwierdzeniem błędu (MaxRecursion, $RecursionLimit,
(c) Krzysztof Barteczko 2014
Akademia C# lab. 9 Zdarzenia i delegaty.
Podstawy automatyki I Wykład /2016
Funkcja – definicja i przykłady
Przetwarzanie języka Wprowadzenie do informatyki Jerzy Nawrocki
Programowanie obiektowe Wykład 10
Programowanie obiektowe
Elementy analizy matematycznej
Lekcja 1 – Hello World! Visual Studio, coś łatwego na początek 
Programowanie obiektowe
Programowanie obiektowe
Zygmunt Kubiak Instytut Informatyki Politechnika Poznańska
Programowanie obiektowe
Projekt edukacyjny w gimnazjum
Tensor naprężeń Cauchyego
Instrukcje wyboru.
Wyrok NSA z dnia 29 listopada 2017 r., II FSK 1633/17
Podstawy prawne ochrony środowiska - regulacja prawna
Podstawy informatyki Zygfryd Głowacz.
Zmienne i typy danych w C#
ALGORYTMY I STRUKTURY DANYCH
Iteracyjno-rozwojowy cykl oprogramowania 2
Proste obliczenia w arkuszu kalkulacyjnym
J2EE: Bazy danych c.d. Język zapytań EJB QL.
Implementacja rekurencji w języku Haskell
Znajdowanie liczb pierwszych w zbiorze
Jak szukać błędów w Eclipsie?
Bufory.
Język C++ Preprocesor Łukasz Sztangret Katedra Informatyki Stosowanej i Modelowania Prezentacja przygotowana w oparciu o materiały Danuty Szeligi i Pawła.
Język C++ Operatory Łukasz Sztangret Katedra Informatyki Stosowanej i Modelowania Prezentacja przygotowana w oparciu o materiały Danuty Szeligi i Pawła.
Pomoc przy dzieleniu pisemnym
Wyrok WSA w Bydgoszczy z dnia 27 października 2016 r., I SA/Bd 613/16
Obiektowe języki zapytań
Asynchroniczne operacje I/O za pomocą IOCP
dr Robert Kowalczyk, PWSZ Płock
Zapis prezentacji:

Kurs języka C++ – wykład 13 (27.05.2015) Obiekty funkcyjne i lambdy

Spis treści Funktory i predykaty Funkcje lambda

Funktory i predykaty Obiekt funkcyjny to obiekt, w którym jest zdefiniowany operator wywołania funkcji operator(). Zalety obiektów funkcyjnych: Funktor to obiekt klasy z operatorem wywołania funkcji. Predykat to funktor, który wyniku zwraca wartość boolowską.

Obiekt funkcyjny jako kryterium sortowania class Person { public: string firstname() const; string lastname() const; … }; class PersonSortCriterion { bool operator() (const Person& p1, const Person& p2) const { // a person is less than another person - if the last name is less // - if the last name is equal and the first name is less return p1.lastname()<p2.lastname() || p1.lastname()==p2.lastname() && p1.firstname()<p2.firstname(); }

Obiekt funkcyjny ze stanem wewnętrznym class IntSequence { private: int value; public: IntSequence (int initialValue) // constructor : value(initialValue) {} int operator() () { // ‘‘function call’’ return ++value; } };

Algorytm for_each Algorytm for_each aplikuje funkcje zdefiniowaną w obiekcie funkcyjnym do wszystkich elementów kolekcji. Algorytm for_each zwraca swój obiekt funkcyjny. Przykład: class MeanValue { int num; // number of elements long sum; // sum of all element values public: MeanValue () : num(0), sum(0) {} void operator() (int elem) { ++num; // increment count sum += elem; // add value } double value () { return static_cast<double>(sum) / num; } };

Funkcje lambda Programista często chciałby zdefiniować predykatowe funkcje w pobliżu wywołań takich funkcji, jak na przykład pochodzących ze standardowej biblioteki <algorithm> (szczególnie sort i find) – oczywistym rozwiązaniem jest zdefiniowanie w takim miejscu funkcji lambda (określanej też jako lambda-wyrażenie). Funkcje lambda to anonimowe obiekty funkcyjne. Główne zastosowanie funkcji lambda to ich użycie jako argumentu sterującego obliczeniami w innych funkcjach. Przykład: [](int x, int y) { return x + y; }

Funkcje lambda Funkcja lambda określa typ zwracanego wyniku za pomocą frazy -> TYP. Przykład: [](int x, int y) -> int { int z = x * x; return z + y + 1; } Jeśli ciało funkcji lambda składa się z jednej instrukcji return, to typ zwracanego wyniku będzie wydedukowany za pomocą decltype(). Przykład: [](int x, int y) // -> decltype(x*x+y+1) { return x * x + y + 1; }

Funkcje lambda Dostęp do lokalnych zmiennych lub pól w obiekcie określa się w funkcji lambda za pomocą domknięcia, czyli wewnątrz początkowych nawiasów kwadratowych [] na początku definicji. Domknięcie puste[]oznacza, że funkcja lambda nie potrzebuje dostępu do zmiennych z lokalnego środowiska (zdefiniowanych poza funkcją lambda). Domknięcie [&] oznacza, że wszystkie zmienne z lokalnego środowiska są dostępne przez referencję. Przykład: vector<int> v {9, 4, 1, 6, 8}; bool sensitive = true; // ... sort(v.begin(), v.end(), [sensitive](int x, int y) { return sensitive ? x<y : abs(x)<abs(y); });

Funkcje lambda Dostęp do lokalnych zmiennych lub pól w obiekcie określa się w funkcji lambda za pomocą domknięcia, czyli wewnątrz początkowych nawiasów kwadratowych [] na początku definicji. Domknięcie puste[]oznacza, że funkcja lambda nie potrzebuje dostępu do zmiennych z lokalnego środowiska (zdefiniowanych poza funkcją lambda). Domknięcie [&] oznacza, że wszystkie zmienne z lokalnego środowiska są dostępne przez referencję. Domknięcie [=] oznacza, że wszystkie zmienne z lokalnego środowiska są dostępne przez wartość (kopiowanie wartości następuje w miejscach, w których funkcja lambda odwołuje się do zewnętrznych zmiennych).

Funkcje lambda …