Download as pdf or txt
Download as pdf or txt
You are on page 1of 6

W2.

2 Wysota
wtorek, 6 grudnia 2022 18:14

Szablony

Nie ma czegoś jak funkcja szablonowa, szablony to instrukcje,


przepisy z których tworzone są funkcje, klasy..

Kompilator generuje z szablonu klasę czy funkcję dopiero jak


jej potrzebuje

Parametry szablonów
Argumentem szablonu nie są tylko typy, ale i wyrażenia
Parametr niebędący typem może być np. liczbą całkowitą,
wskaźnikiem czy wieloma innymi rzeczami których nie
zdążyłem przepisać ale były na slajdzie

Jeżeli mamy template <typename T> T min(T a, T b);

Min(10, 10.1) - to wywali błąd, bo jak ma sam ustalić, to oba


mają być takie same
Min<int>(10, 10.1) - a tutaj się uda, bo mu sami
powiedzieliśmy, że ma traktować jako int

Specjalizacje szablonów
- Częściowa - część parametrów szablonowyc
- I jakaś tam

Szablony bez szablonów - C++20 + auto

auto min(auto lhs, auto rhs) {


return lhs < rhs ? lhs : rhs;
}
ZPR Strona 1
}

Ta funkcja powyżej wcale nie jest funkcją, jest szablonem


Ale ten szablon jest akurat źle zapisany, bo funkcja min musi
mieć dwa takie same typy, a tutaj niekoniecznie tak będzie

Zaczyna się na ostatnich 10 minutach pierwszej połowy


wykładu
Biblioteka standardowa, programowanie generyczne

Typy danych:
- Pair
- Tuple
- Kolekcje
○ Vector (nie poleca używać, jeżeli mamy ogromny zbiór
danych jest olbrzymi, bo wrzucanie będzie
kosztowne - a tak to normalnie zazwyczaj jest
najlepszy)
○ deque
○ Map
○ unordered_map
○ Set
○ Unordered_set
○ List

Vector - emplace_back, push_back

span (C++20)

Sortowanie przez wybór Selection sorting algorithm zapisany


ładnie i brzydko

ZPR Strona 2
Sortowanie przez wstawianie - tak samo - zapisany ładnie i
brzydko

Jak zmienne są logicznie opisane to idzie coś zrozumieć


dopiero w algorytmach

Quicksort
Implementujemy go live na wykładzie :o

Ogólnie chodzi o to, że w bibliotece standardowej mamy


mnóstwo gotowych algorytmów, przy pomocy których w
łatwy sposób możemy zaimplementować bardziej złożone
algorytmy przy jednoczesnym zachowaniu czytelności kodu

Zalety używania gotowych algorytmów:


- Czytelność
○ Clean code - funkcja wołająca działa na jednym
poziomie abstrakcji
○ Dobrze nazwane funkcje zamiast ściany kodu
- Odporność na błędy
○ Przetestowane przez miliony użytkowników
○ Automatycznie dostajemy ewentualne poprawki przy
rekompilacji z nowszą STD
- Wydajność
○ Algorytmy dopasowują się do charakterystyki danych,
na których operują
○ Kompilator "widzi" kod (szablony), co pozwala mu go
zoptymalizować

Iterator - omijamy bo nie ma czasu, ale wypada wiedzieć co


to jest XD

Adaptery iteratorów:
- Reverse_iterator
ZPR Strona 3
- Reverse_iterator
- Move_iterator
- Back_insert_iterator
- Front_insert_iterator
- Insert_iterator

Wyrażenie lambda definiuje domknięcie - anonimową


funkcję, która przechowuje dane ze swojego środowiska,
które są jej potrzebne do obliczeń
- Można ją przypisać do zmiennej ( najczęście jako auto)
- Można jej używac jak funkcję, ale ona nie jest funkcją
tylko jakby zmienną normalnie
- I coś tam jeszcze było na slajdzie ale kto nadąży to
przepisywać xd

Tutaj na kolejnym slajdzie składnia lambdy


auto fun = [](int a, int b){ return a > b;};
Bool ewa = fun(1,2)

Lambda przechwycenia:
- = - wszystko przez wartość
- & - wszystko przez referencję
- nazwa_zmiennej - pojedyncza zmienna przez wartość

Przechwycenia przykład

auto predicate = [threshold] (int value) {return value


< threshold};

Lambda - realizacja
Nie ma czasu ale zauważcie że po lewej stronie 4 linie robią
to samo co 12 linijek po prawej, więc lambda pozwala
zaoszczędzić kilka linii kodu
ZPR Strona 4
zaoszczędzić kilka linii kodu

Generalizacja wyrażeń lambda


[] (auto v1, auto v2) { … } -> prowadzący zaleca, żeby dla
lambdy zawsze używać tego auto

Lambda w C++20
Możemy wyspecyfikować parametry szablonowe dla lambdy

Algorytmy - sprawdzanie
- any_of
- all_of
- none_of

Algorytmy - wyszukiwanie
- find
- find_if
- adjacent_find
- mismatch
- search

Algorytmy - zliczanie
- count
- count_if

Algorytmów jest mega dużo, nie mamy czasu omawiać, ale


warto wiedzieć, że jest ich dużo
Na slajdach jakieś tam powymieniane, kilka powyżej
przepisałem, ale więcej to bez sensu, już lepiej zagadać
prowadzącego o slajdy po ludzku i sobie spojrzeć

Losowanie, losowość - o tym nie mówił

Poleca prezentację, link gdzieś na koniec slajdów, że niby


jak się poświęci niecałą godzinę to do jego części kolosa
ZPR Strona 5
jak się poświęci niecałą godzinę to do jego części kolosa
człowiek prawie przygotowany

Polimorfizm - omówione w 30 sekund, chodzi o to że jeden


cel możemy osiągnąć na wiele różnych sposobów,
- Przeciązanie funkcji
- Szablony
- Warianty
- Polimorfizm dynamiczny ( funkcje wirtualne )

Prowadzi wykład drugi raz, powie

Dwa zadania sem temu, teraz pewnie będzie podobnie:


Jedno blok kodu i znajdź te algorytmy, uprościć kod stosując
algorytmy biblioteki standardowej
Drugie zadanie z constowości problem polegał na tym że
chcemy metodę która z jednej strony ma modyfikować, a z
drugiej być const i co zastosować i problem był taki że nie
było tego na slajdzie XD

ZPR Strona 6

You might also like