Definicja szablonu klasy. Korzystanie z szablonu. Specjalizacja metody szablonu.

Podobne dokumenty
Programowanie i struktury danych

STL: Lekcja 1&2. Filozofia STL

Algorytmy w C++ dla opornych!

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

STL Standardt Template Library (wprowadzenie)

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

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

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

Kontenery i iteratory. Wykorzystanie kontenerów w praktyce.

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

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

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

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

Paradygmaty programowania

Język C++ wykład VIII

Zaawansowane programowanie w języku C++ Biblioteka standardowa

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

Zaawansowane programowanie w C++ (PCP)

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

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

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

Programowanie obiektowe w C++ Wykład 12

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

Szablony klas, zastosowanie szablonów w programach

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

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

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

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.

Paradygmaty programowania

Biblioteka standardowa C++

Szablon klasy std::vector

Algorytmy i Struktury Danych.

Mechanizm dziedziczenia

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

Język C++ część 9 szablony klas. Jarosław Gramacki Instytut Informatyki i Elektroniki. szablony funkcji

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

Program 14. #include <iostream> #include <ctime> using namespace std;

Operatory na rzecz typu TString

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

Programowanie Komponentowe Zarządzanie obiektami: kontenery

Projektowanie klas c.d. Projektowanie klas przykład

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

referencje Wykład 2. Programowanie (język C++) Referencje (1) int Num = 50; zdefiniowano zmienną Num (typu int) nadając jej wartość początkową 50.

Zaawansowane programowanie w C++ (PCP)

Jak Windows zarządza pamięcią?

obiekty funkcyjne - funktory

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

Wzorce funkcji (szablony)

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

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

Wykorzystanie elementów z biblioteki standardowej C++: vector, list, complex oraz string.

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

Kurs programowania. Wykład 9. Wojciech Macyna

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

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

Algorytmy i Struktury Danych. Anna Paszyńska

Przeciążenie operatorów

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

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

Część 4 życie programu

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

Biblioteka STL - wstęp. Biblioteka STL - literatura. Biblioteka STL - przegląd. Biblioteka STL - kwestie techniczne

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

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

Informatyka 2. Wykład nr 3 ( ) Politechnika Białostocka. - Wydział Elektryczny. dr inŝ. Jarosław Forenc

Podstawy Programowania

FUNKCJE WZORCOWE. Wykład 10. Programowanie Obiektowe (język C++) Funkcje wzorcowe wprowadzenie (2) Funkcje wzorcowe wprowadzenie (1)

Programowanie w języku C++

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

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

Szablony. Szablony funkcji

Programowanie komputerowe. Zajęcia 5

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

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

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

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

Wstęp do Programowania 2

Programowanie współbieżne i rozproszone

void Pobierz(Student &a); void Wypisz(Student a); void Ustaw_zaliczenia(Student t[],int r); void Wypisz_najlepszych(Student t[],int r, float prog);

BIBLIOTEKA STANDARDOWA C++

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

Strona główna. Strona tytułowa. Programowanie. Spis treści. Sobera Jolanta Strona 1 z 26. Powrót. Full Screen. Zamknij.

Algorytmy, iteratory, kolekcje niestandardowe

8. Wektory. Przykłady Napisz program, który pobierze od użytkownika 10 liczb, a następnie wypisze je w kolejności odwrotnej niż podana.

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

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

Technologie cyfrowe semestr letni 2018/2019

Dziedziczenie jednobazowe, poliformizm

dr inż. Jarosław Forenc

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.

Programowanie obiektowe w języku C++ dr inż. Jarosław Forenc

Wykład 4. Klasa List Kolejki Stosy Słowniki

Mechanizm dziedziczenia

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

Programowanie obiektowe i C++ dla matematyków

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

Technologie cyfrowe semestr letni 2018/2019

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

Wstęp do programowania

Programowanie C++ Wykład 2 - podstawy języka C++ dr inż. Jakub Możaryn. Warszawa, Instytut Automatyki i Robotyki

Transkrypt:

class Wektor private: Typ x; Typ y; Wektor(Typ a, Typ b) :x(a), y(b) ; Wektor<int> A(2, 5); Wektor<double> B(2.7, 9.7); Wektor<char> C('A', 'B'); 1 Definicja szablonu klasy. Korzystanie z szablonu. class X Typ a; Typ b; X(Typ,Typ); ; X<int> A(4, 77); A.metoda( ); X<double> AA(4.7, 5.9); AA.metoda( ); X<std::string> AAA("ola","ala"); AAA.metoda( ); X<Typ>::X(Typ aa,typ bb) : a(aa), b(bb) 4 77 4.7 5.9 ola ala 2 Konkretyzacja dla typów definiowane przez uŝytkownika. class Skarb int skarb; friend std::ostream& operator<<(std::ostream& ekran, const Skarb& co) return ekran<<"skarb = "<<co.skarb<<" "; ; X<Typ>::X(Typ aa,typ bb) : a(aa), b(bb) Skarb S, Q; X<Skarb> P(S, Q); P.metoda( ); 3 Specjalizacja metody szablonu. class X Typ a; Typ b; X(Typ,Typ); ; template<> void X<double>::metoda(); X<int> A(4, 77); A.metoda( ); X<double> AA(4.7, 5.9); AA.metoda( ); X<std::string> AAA("ola","ala"); AAA.metoda( ); X<Typ>::X(Typ aa,typ bb) : a(aa), b(bb) template<> void X<double>::metoda() std::cout<<a<<" & "<<b<<"\n"; 4 77 4.7 & 5.9 ola ala 4

Specjalizacja całego szablonu. Czasami dla pewnego typu nie moŝna uŝywać pełnej definicji szablonu klasy. W takiej sytuacji specjalizuje się cały szablon klasy. Przed jawną specjalizacją szablonu klasy musi być znana deklaracja ogólnego szablonu klasy. Definiując specjalizację szablonu klasy, musimy równieŝ zdefiniować wszystkie metody klasy. Ogólne definicje składowych szablonu klasy nigdy nie są uŝywane do tworzenia definicji składowych jawnej specjalizacji. W specjalizacji szablonu klasy moŝe wystąpić zupełnie inny zbiór składowych klasy niŝ w jej ogólnym szablonie. JeŜeli specjalizacja dotyczy całej klasy, to tylko przed jej definicją umieszczamy template< >. 5 Specjalizacja całego szablonu. class X Typ a, b; X(Typ,Typ); ; template<> class X<int> int a; X(int); ; X<int> A(4); A.metoda( ); X<double> AA(4.7, 5.9); AA.metoda( ); X<std::string> AAA("ola","ala"); AAA.metoda( ); X<Typ>::X(Typ aa,typ bb) : a(aa), b(bb) X<int>::X(int aa):a(aa) void X<int>::metoda() std::cout<<"( "<<a<<" )\n"; ( 4 ) 4.7 5.9 ola ala 6 Dziedziczenie a szablony klas. Szablon klasy dziedziczy klasę nieszablonową Klasa dziedziczy klasę szablonową void wypisz( ) cout<<"schowek "<<Typ(123.67)<<endl; ; class Sekret :public Schowek<int> void pisz( ) cout<<"sekret"<<endl; wypisz( ); ; Sekret S; Sekret 7 void wypisz( ) cout<<"schowek "<<endl<<""<<endl; ; template <class T> class Sekret :public Schowek void pisz( ) cout<<"sekret "<<T(345.98)<<endl; wypisz( ); ; Sekret<int> S; Sekret<double> SS; S Schowek Schowek 8

Szablon klasy dziedziczy klasę szablonową void wypisz( ) cout<<"schowek "<<Typ(123.67)<<endl<<""<<endl; ; template <class T> class Sekret :public Schowek<double> void pisz( ) cout<<"sekret "<<T(345.98)<<endl; wypisz( ); ; Szablon klasy dziedziczy szablon innej klasy void wypisz ( ) cout<<"schowek "<<Typ(123.67)<<endl<<""<<endl; ; template <class T> class Sekret :public Schowek<T> void pisz( ) cout<<"sekret "<<T(345.98)<<endl; wypisz( ); ; Sekret<int> S; Sekret<double> SS; S 9 Sekret<int> S; Sekret<double> SS; S 10 Szablon klasy dziedziczy szablon innej klasy void wypisz() cout<<"schowek "<<Typ(123.67)<<endl<<""<<endl; ; template <class T, class P> class Sekret :public Schowek<P> void pisz() cout<<"sekret "<<T(345.98)<<endl; wypisz(); ; Sekret<int, double> S; Sekret<double, int> SS; S Sekret<double, double> SSS; SS Sekret<int, int> SSSS; SSS 11 #include <iostream> int min(int a,int b); using namespace std; cout<<min(10,20)<<endl; cout<<min<int>(10,20)<<endl; cout<<min(10.9,20)<<endl; cout<<min<double>(10.9,20)<<endl; int min(int a,int b) cout<<"*"; return (a<b)? a:b; Co pojawi się na ekranie? *10 10 *10 10.9 12

#include <iostream> #include <algorithm> bool wieksze(int a,int b); using namespace std; int main() int A[5]=1,7,8,-9,2; cout<<*min_element(a,a+5)<<endl; sort(a,a+5); for(int i=0; i<5; i++) cout<<a[i]<<" "; cout<<endl; sort(a,a+3,&wieksze); for(int i=0; i<5; i++) cout<<a[i]<<" "; -9-9 1 2 7 8 2 1-9 7 8 STL Standard Template Library Umowa: STL standardowa biblioteka, która posługuje się iteratorami. Zatem do STL naleŝą: kolekcje (kontenery), algorytmy uogólnione oraz obiekty funkcyjne (funktory). Kolekcje - szablony klas Kolekcje dzielimy na: sekwencyjne np.: vector, list asocjacyjne np.: map, set. Algorytmy uogólnione szablony funkcji. Algorytmy uogólnione moŝemy podzielić na modyfikujące (np.: remove, sort) i nie modyfikujące (find, count). Obiekty funkcyjne obiekty klas, które zawierają co najmniej przeciąŝony operator wywołania funkcji ( ). UmoŜliwiają zastąpienie domyślnego znaczenia algorytmów uogólnionych. bool wieksze(int a,int b) return (a>b)? true:false; 13 Iterator jest obiektem, który porusza się w obrębie kolekcji innych obiektów. Udostępnia on za kaŝdym razem pojedynczy, zawarty w kolekcji, obiekt. Korzystając z iteratora moŝna przejść przez elementy całej kolekcji w taki sposób w jaki wskaźnik przebiega po elementach tablicy. 14 Kolekcje sekwencyjne i ich niektóre składowe: Typy składowe: value_type typ elementu iterator zachowuje się jak value_type* const_iterator zachowuje się jak const value_type* reverse_iterator przegląda kolekcję w odwrotnym porządku; jak value_type* const_reverse_iterator przegląda kolekcję w odwrotnym porządku; jak const value_type* reference zachowuje się jak value_type const_ reference zachowuje się jak const value_type Iteratory - inicjowanie begin( ) wskazuje na pierwszy element end( ) wskazuje na element pierwszy za ostatnim rbegin( ) wskazuje na pierwszy element w ciągu odwróconym rend( ) wskazuje na element pierwszy za ostatnim w ciągu odwróconym Dostęp do elementu w kolekcji A: A.front( ) pierwszy element A.back( ) ostatni element A[nr] indeksowanie, dostęp niekontrolowany (nie dla list) A.at(nr) dostęp kontrolowany (nie dla list) iteratory za pomocą * 15 Nadawanie wartości początkowych konstruktory. Destruktor. container ( ) pusta kolekcja container (n) n elementów z domyślną wartością container (n, x) n kopii x container (first, last) elementy z [first, last) container (X) konstruktor kopiujący ~ container ( ) zniszcz kolekcje i wszystkie jej elementy Przypisania operator =(X) operator przypisania assign(n, x) przypisz n kopii x assign(first, last) przypisz elementy z [first, last) Dodawanie i usuwanie elementów z kolekcji push_back(x) wstaw na koniec x pop_back( ) usuń ostatni element push_front(x) wstaw na początek x (dla list) pop_front( ) usuń pierwszy element (dla list) insert(p,x) wstaw x przed p insert(p,n,x) wstaw n kopii x przed p insert(p, first, last)wstaw elementy z [first, last) przed p erase(p) usuń element wskazywany przez p erase(first, last) usuń [first, last) clear( ) usuń wszystkie elementy 16

Wszystkie kolekcje dostarczają operacje dotyczące między innymi liczby elementów. size( ) liczba elementów empty( ) czy kolekcja jest pusta max_size( ) największy dopuszczalny rozmiar capacity( ) pamięć przydzielona na wektor (tylko wektory) reserve(n) przydziel pamięć dla n elementów (tylko wektory) resize(n) zmień rozmiar kolekcji na n (tylko dla wektorów, list i kolejek) W przykładach będziemy korzystać z szablonu: int tab[7] = -1, 6, 3, -1, -8, 9, 2; vector<int> vec (tab + 2, tab + 5); vec.pop_back( ); vec.push_back(123); void wypisz(typ &co) if (co.empty( )) cout<<"brak elementow w kolekcji"<<endl; return; for (Typ::iterator it=co.begin( ); it!=co.end( );++it) cout<<*it<<" "; cout<<endl; 17 string str[5]="styczen", "luty", "maj", "czerwiec", "grudzien"; list<string> miesiace(str,str+5); miesiace.pop_front( ); miesiace.push_back("marzec"); miesiace.push_front("lipiec"); miesiace.pop_back( ); 3-1 -8 3-1 123 styczen luty maj czerwiec grudzien luty maj czerwiec grudzien marzec lipiec luty maj czerwiec grudzien 18 int tab[7] = -1, 6, 3, -1, -8, 9, 2; vector<int> vec (tab + 2, tab + 5); vec.insert(vec.begin( )+2,100); vec.insert(vec.begin( )+1,vec.begin( ), vec.end( )); vec.insert(vec.begin( )+6,-10); vec.erase(vec.begin( )+3); vec.erase(vec.begin( ), vec.begin( )+2); vec.clear( ); 3-1 -8 3-1 100-8 3 3-1 100-8 -1 100-8 3 3-1 100-8 -1-10 100-8 3 3-1 -8-1 -10 100-8 -1-8 -1-10 100-8 Brak elementow w kolekcji 19 Algorytmy uogólnione, realizują najczęściej wykonywane operacje i stosują się do rozmaitych typów zbiorczych nie tylko do kolekcji, takich jak wektor lub lista, lecz takŝe do wbudowanego typu tablicowego. Do algorytmu uogólnionego, który ma działać na jakiejś kolekcji, przekazuje się kolekcję za pośrednictwem pary iteratorów zaznaczających Ŝądany podzbiór elementów. Niemal wszystkie algorytmy uogólnione jako pierwsze dwa argumenty pobierają parę iteratorów, które określają zakres, na którym ma pracować algorytm. Zakres ten podaje się zwykle jako przedział domknięty z lewej strony. Para iteratorów musi spełniać następujący warunek: poczynając od wartości iteratora pierwszego i powtarzając wykonanie operatora zwiększania, moŝna zawsze osiągnąć wartość iteratora ostatniego. UŜywając któregokolwiek algorytmu uogólnionego, musimy dołączyć do programu plik nagłówkowy <algorithm> 20

Algorytmy nie modyfikujące kolekcji: Algorytm count( ) zlicza ile razy pojawiła się w przekazanym zakresie wartość trzeciego argumentu. Wykorzystuje operator ==. find( ) find_if( ) find_first_of( ) adjacent_find( ) count( ) count_if( ) equal( ) search( ) find_end( ) search_n( ) min_element( ) max_element( ) znajdź pierwsze wystąpienie wartości w ciągu znajdź w ciągu pierwsze wystąpienie wartości spełniającej predykat znajdź pierwsze wystąpienie wartości z jednego ciągu w innym znajdź pierwszą sąsiadującą parę wartości równych policz wystąpienia wartości w ciągu policz w ciągu wystąpienia wartości spełniających predykat prawda, jeśli elementy dwóch ciągów są parami równe znajdź pierwsze wystąpienie ciągu jako podciągu znajdź ostatnie wystąpienie ciągu jako podciągu znajdź n kolejnych wystąpień wartości w ciągu znajdź element najmniejszy kolekcji znajdź element największy kolekcji int tab[10] = -1, 6, 7, 3, -1, -8, 9, 2, 3; int ile=count(wektor.begin( ), wektor.end( ), 3); cout<<"wartosc 3 wystapila "<<ile<<" raz(y)"<<endl; Sprawdzam ile razy wystąpiła liczba parzysta: class Parzysta bool operator( )(int wrt) return (wrt%2==0 && wrt!=0)? true: false; ; Wartosc 3 wystapila 2 raz(y) 21 int tab[10] = -1, 6, 7, 3, -1, -8, 9, 2, 3; Wartosc parzysta wystapila 3 raz(y) int ile=count_if(wektor.begin( ), wektor.end( ), Parzysta( )); 22 cout<<"wartosc parzysta wystapila "<<ile<<" raz(y)"<<endl; template <class InputIterator, class T> int count (InputIterator first, InputIterator last, const T& val) int res=0; while (first!=last) if (*first++ ==val) ++res; return res; template <class InputIterator, class Pred> int count_if (InputIterator first, InputIterator last, Pred p) int res=0; while (first!=last) if (p(*first++)) ++res; return res; 23 class PodzielnaPrzez PodzielnaPrzez(int a=2) : liczba(a) bool operator( ) (int wrt) return (wrt%liczba==0 && wrt!=0)? true: false; private: int liczba; ; int tab[10] = -1, 6, 7, 3, -1, -8, 9, 2, 3; int ile=count_if(wektor.begin( ), wektor.end( ), PodzielnaPrzez(3)); cout<<"wartosc podzielna przez 3 wystapila "<<ile<<" raz(y)"<<endl; Zliczanie liczb dodatnich Wartosc podzielna przez 3 wystapila 4 raz(y) int tab[10] = -1, 6, 7, 3, -1, -8, 9, 2, 3; Wartosc dodatnia wystapila 6 raz(y) int ile=count_if(wektor.begin( ), wektor.end( ), bind2nd(greater<int>( ),0)); cout<<"wartosc dodatnia wystapila "<<ile<<" raz(y)"<<endl; 24

W bibliotece standardowej znajduje się zdefiniowany pierwotnie zbiór arytmetycznych, relacyjnych i logicznych obiektów funkcyjnych. Arytmetyczne obiekty funkcyjne: plus<typ>( ), minus<typ>( ), negate<typ>( ), multiplies<typ>( ), divides<typ>( ), modulus<typ>( ) Relacyjne obiekty funkcyjne less<typ>( ), less_equal<typ>( ), greater<typ>( ), greater<typ>( ), equal_to<typ>( ), not_equla_to<typ>( ) Logiczne obiekty funkcyjne logical_and<typ>( ), logical_or<typ>( ), logical_not<typ>( ) Aby uŝyć pierwotnie zdefiniowanych obiektów funkcyjnych, musimy dołączyć do programu plik nagłówkowy <functional> Adaptory obiektów funkcyjnych (wiązadła) przekształcają dwuargumentowy obiekt funkcyjny w obiekt jednoargumentowy związując jeden z argumentów z konkretną wartością: bind1st(nazwaklasy( ),x) - wywołaj funkcję dwuargumentową, której pierwszym argumentem jest x bind2nd(nazwaklasy( ),y) - wywołaj funkcję dwuargumentową, której pierwszym argumentem jest y 25 Algorytmy modyfikujące kolekcje transform( ) zastosuj operację do kaŝdego elementu w ciągu copy( ) kopiuj ciąg począwszy od pierwszego elementu copy_backward( ) kopiuj począwszy od ostatniego elementu. replace( ) zastąp elementy podaną wartością replace_if( ) zastąp elementy spełniające predykat replace_copy( ) kopiuj ciąg zastępując elementy podaną wartością replace_copy_if( ) kopiuj ciąg zastępując elementy spełniające predykat fill( ) zastąp kaŝdy element podaną wartością fill_n( ) zastąp pierwszych n elementów podaną wartością remove( ) usuń element o podanej wartości remove_if( ) usuń elementy spełniające predykat remove_copy( ) kopiuj ciąg, usuwając elementy o podanej wartości remove_copy_if( ) kopiuj ciąg, usuwając elementy spełniające predykat unique( ) usuń równe elementy sąsiadujące unique_copy( ) kopiuj, usuwając równe elementy sąsiadujące reverse( ) odwróć kolejność elementów reverse_copy( ) kopiuj ciąg odwracając kolejność elementów rotate( ) dokonaj rotacji elementów rotate_copy( ) kopiuj ciąg dokonując rotacji elementów sort( ) sortuj elementy kolekcji 26 Algorytm sort( ) zmienia kolejność elementów naleŝących do zakresu oznaczonego parą iteratorów [pierwszy, ostatni) i tworzy ciąg uporządkowany, korzystając z operatora mniejsze. int tab[10] = -1, 6, 7,3, -1, -8, 9, 2,3; sort(wektor.begin( ), wektor.end( )); sort(wektor.rbegin( ), wektor.rend( )); -8-1 -1 0 2 3 3 6 7 9 9 7 6 3 3 2 0-1 -1-8 class MniejszeNiz styczen luty maj czerwiec grudzien maj luty styczen czerwiec grudzień bool operator( ) (const string &a, const string &b) return a.size( )<b.size( ); string str[5]="styczen", "luty", "maj", "czerwiec", "grudzien"; vector<string> miesiace(str, str+5); sort(miesiace.begin( ), miesiace.end( ), MniejszeNiz( )); 27