Algorytmy, iteratory, kolekcje niestandardowe
|
|
- Sylwia Smolińska
- 8 lat temu
- Przeglądów:
Transkrypt
1 Algorytmy, iteratory, kolekcje niestandardowe Biblioteka STL Sebastian Deorowicz Politechnika Śląska Sebastian Deorowicz (PŚl) Algorytmy, iteratory, kolekcje niestandardowe / 83
2 Plan wykładu 1 Iteratory Funkcje pomocnicze iteratorów Iteratory odwrotne Iteratory wstawiające Iteratory strumieniowe 2 Algorytmy Algorytmy modyfikujące Algorytmy sortowania i pochodne Algorytmy zbiorowe Algorytmy kopcowe Algorytmy inne Algorytmy matematyczne 3 Kolekcje niestandardowe SGI STL, STLPort, Borland C++ Builder 6+ MS Visual C++ C++ TR1 Sebastian Deorowicz (PŚl) Algorytmy, iteratory, kolekcje niestandardowe / 83
3 Plan wykładu 1 Iteratory Funkcje pomocnicze iteratorów Iteratory odwrotne Iteratory wstawiające Iteratory strumieniowe 2 Algorytmy Algorytmy modyfikujące Algorytmy sortowania i pochodne Algorytmy zbiorowe Algorytmy kopcowe Algorytmy inne Algorytmy matematyczne 3 Kolekcje niestandardowe SGI STL, STLPort, Borland C++ Builder 6+ MS Visual C++ C++ TR1 Sebastian Deorowicz (PŚl) Algorytmy, iteratory, kolekcje niestandardowe / 83
4 Funkcje pomocnicze iteratorów template <class InputIterator, class Distance> void advance(inputiterator& i, Distance n) Działanie: Przesuwa iterator o n pozycji w przód Parametry: i iterator wejściowy, postępujący, dwukierunkowy, bądź dostępu swobodnego n liczba elementów Distance w zasadzie typ całkowity, ponieważ muszą być dla niego dostępne operacje <, ++, --, porównania z 0 Zwracana wartość: brak Złożoność: O(1) dla iteratorów dostępu swobodnego O(n) dla pozostałych iteratorów Uwaga: Funkcja nie sprawdza czy nastąpiło przekroczenie zakresu Dla iteratorów dwukierunkowych lub dostępu swobodnego n może być mniejsze od 0 Funkcja w zależności od typu iteratora sama wybiera sposób inkrementacji (opierając się na cechach iteratorów [ang. iterator traits]) Sebastian Deorowicz (PŚl) Algorytmy, iteratory, kolekcje niestandardowe / 83
5 Funkcje pomocnicze iteratorów template <class InputIterator> typename iterator_traits<inputiterator>::difference_type distance(inputiterator first, InputIterator last) Działanie: Zwraca odległość między iteratorami Parametry: first, last iteratory Zwracana wartość: Odległość między iteratorami, zwykle typu int Złożoność: O(1) dla iteratorów dostępu swobodnego O(last first) dla iteratorów wejściowych, postępujących i dwukierunkowych Uwagi: Funkcja automatycznie wykorzystuje najlepszą implementację do wyznaczenia odległości last powinien być osiągalny z first, bo jeśli nie to zachowanie niezdefiniowane Sebastian Deorowicz (PŚl) Algorytmy, iteratory, kolekcje niestandardowe / 83
6 Funkcje pomocnicze iteratorów template <class InputIterator> void iter_swap(forwarditerator iter1, ForwardIterator iter2) Działanie: Zamienia wartości elementów, które wskazują iteratory iter1, iter2 Parametry: iter1, iter2 iteratory Zwracana wartość: Brak Złożoność: O(1) Sebastian Deorowicz (PŚl) Algorytmy, iteratory, kolekcje niestandardowe / 83
7 Iteratory odwrotne Opis Są adaptatorami iteratorów, w których przedefiniowano operacje inkrementacji i dekrementacji Przydają się czasami np. jeśli wyszukujemy jakiegoś elementu, a następnie chcemy, aby algorytm przetworzył elementy wcześniejsze w odwrotnym porządku Możliwa jest konwersja iteratorów zwykłych na odwrotne (a także w drugą stronę) Sebastian Deorowicz (PŚl) Algorytmy, iteratory, kolekcje niestandardowe / 83
8 Iteratory odwrotne przykład Przykład #include <iostream> #include <vector> #include <algorithm> const int MAX = 10; using namespace std; int main(int argc, char* argv[]) { int tab[max] = {0, 1, 2, 3, 4, 5, 6, 7, 8, 9}; vector<int> vi(tab, tab+max); ShowCollection(vi); vector<int>::iterator p = find(vi.begin(), vi.end(), 6); cout << *p << endl; // 6 vector<int>::reverse_iterator q(p); cout << *q << endl; // 5 } vector<int>::iterator r(q.base()); cout << *r << endl; // 6 Sebastian Deorowicz (PŚl) Algorytmy, iteratory, kolekcje niestandardowe / 83
9 Iteratory odwrotne konwersja O co chodzi? Podczas konwersji iteratora na odwrotny zmienia się pozycja wskazywana! Dlaczego?! No cóż, to cecha iteratorów Z iteratorami zwykłymi jest tak, że wskazują one na obszar pamięci; iterator na pozycję za ostatnią też wskazuje na pewien obszar pamięci (zaraz za ostatnim elementem) Problem z iteratorami odwrotnymi bierze się z tego, że też powinno być możliwe wskazywanie na element bezpośrednio przed pierwszym elementem kolekcji taki obszar pamięci może jednak w ogóle nie istnieć! W praktyce iterator zwracany przez rbegin() wskazuje to samo(!) co iterator zwracany przez end() Dla iteratorów odwrotnych inaczej jest zdefiniowana operacja dereferencji odnosi się ona do elementu o jedną pozycję wcześniejszego niż przechowywana przez iterator! Sebastian Deorowicz (PŚl) Algorytmy, iteratory, kolekcje niestandardowe / 83
10 Iteratory odwrotne konwersja O co chodzi? Podczas konwersji iteratora na odwrotny zmienia się pozycja wskazywana! Dlaczego?! No cóż, to cecha iteratorów Z iteratorami zwykłymi jest tak, że wskazują one na obszar pamięci; iterator na pozycję za ostatnią też wskazuje na pewien obszar pamięci (zaraz za ostatnim elementem) Problem z iteratorami odwrotnymi bierze się z tego, że też powinno być możliwe wskazywanie na element bezpośrednio przed pierwszym elementem kolekcji taki obszar pamięci może jednak w ogóle nie istnieć! W praktyce iterator zwracany przez rbegin() wskazuje to samo(!) co iterator zwracany przez end() Dla iteratorów odwrotnych inaczej jest zdefiniowana operacja dereferencji odnosi się ona do elementu o jedną pozycję wcześniejszego niż przechowywana przez iterator! Sebastian Deorowicz (PŚl) Algorytmy, iteratory, kolekcje niestandardowe / 83
11 Iteratory odwrotne konwersja Konwersja w drugą stronę Do konwersji iteratora odwrotnego na iterator zwykły służy metoda base() udostępniana przez iteratory odwrotne Sebastian Deorowicz (PŚl) Algorytmy, iteratory, kolekcje niestandardowe / 83
12 Iteratory wstawiające Problem Podczas wykonywania wielu algorytmów wymagane jest, aby obszar docelowy był dostatecznie duży, bo nie jest wykonywana żadna kontrola zakresu W niektórych przypadkach to nie jest duży problem, bo z góry wiadomo jak duży powinien być obszar docelowy Istnieją jednak sytuacje, w których nie wiadomo tego z góry (np. przy wywołaniu algorytmu replace_copy_if) i najpierw trzeba by było obliczyć jego rozmiar Rozwiązanie Istnieją iteratory wstawiające, które są adaptatorami iteratorów, w których operacja przypisania nowej wartości jest implementowana jak operacja wstawienia tej wartości Iteratory wstawiające nie nadpisują elementów, a wstawiają je Sebastian Deorowicz (PŚl) Algorytmy, iteratory, kolekcje niestandardowe / 83
13 Iteratory wstawiające Problem Podczas wykonywania wielu algorytmów wymagane jest, aby obszar docelowy był dostatecznie duży, bo nie jest wykonywana żadna kontrola zakresu W niektórych przypadkach to nie jest duży problem, bo z góry wiadomo jak duży powinien być obszar docelowy Istnieją jednak sytuacje, w których nie wiadomo tego z góry (np. przy wywołaniu algorytmu replace_copy_if) i najpierw trzeba by było obliczyć jego rozmiar Rozwiązanie Istnieją iteratory wstawiające, które są adaptatorami iteratorów, w których operacja przypisania nowej wartości jest implementowana jak operacja wstawienia tej wartości Iteratory wstawiające nie nadpisują elementów, a wstawiają je Sebastian Deorowicz (PŚl) Algorytmy, iteratory, kolekcje niestandardowe / 83
14 Iteratory wstawiające Rodzaje iteratorów wstawiających Iterator wstawiający na koniec Iterator wstawiający na początek Ogólny iterator wstawiający Czym się różnią od zwykłych iteratorów? Zwykły iterator nie wie na elementy jakiej kolekcji wskazuje Iterator wskazujący musi wiedzieć jakiego typu jest kolekcja, której dotyczy, żeby wiedzieć jaką metodę kolekcji wywołać Iterator wskazujący jest inicjalizowany obiektem kolekcji, której dotyczy! Iterator ogólny musi być dodatkowo inicjalizowany pozycją, na której będzie wstawiał elementy Sebastian Deorowicz (PŚl) Algorytmy, iteratory, kolekcje niestandardowe / 83
15 Iteratory wstawiające Rodzaje iteratorów wstawiających Iterator wstawiający na koniec Iterator wstawiający na początek Ogólny iterator wstawiający Czym się różnią od zwykłych iteratorów? Zwykły iterator nie wie na elementy jakiej kolekcji wskazuje Iterator wskazujący musi wiedzieć jakiego typu jest kolekcja, której dotyczy, żeby wiedzieć jaką metodę kolekcji wywołać Iterator wskazujący jest inicjalizowany obiektem kolekcji, której dotyczy! Iterator ogólny musi być dodatkowo inicjalizowany pozycją, na której będzie wstawiał elementy Sebastian Deorowicz (PŚl) Algorytmy, iteratory, kolekcje niestandardowe / 83
16 Algorytmy przykład Przykład #include <algorithm> #include <deque> #include <iterator> using namespace std; int main(int argc, char* argv[]) { deque<int> di; front_insert_iterator<deque<int> > di_f_iter(di); back_insert_iterator<deque<int> > di_b_iter(di); *di_f_iter = 5; *di_f_iter = 10; ShowCollection(di); // 10 5 *di_b_iter = 11; *di_b_iter = 6; ShowCollection(di); // insert_iterator<deque<int> > di_i_iter(di, di.begin()+1); *di_i_iter = 13; ShowCollection(di); // back_inserter(di) = 16; ShowCollection(di); // } copy(di.begin(), di.end(), front_inserter(di)); ShowCollection(di); // Sebastian Deorowicz (PŚl) Algorytmy, iteratory, kolekcje niestandardowe / 83
17 Iteratory wstawiające Iterator wstawiający z przodu Wywołuje metodę: push_front(val) Wzorzec klasy: front_insert_iterator Funkcja tworząca: front_inserter(coll) Iterator wstawiający na koniec Wywołuje metodę: push_back(val) Wzorzec klasy: back_insert_iterator Funkcja tworząca: back_inserter(coll) Iterator wstawiający ogólny Wywołuje metodę: insert(pos, val) Wzorzec klasy: insert_iterator Funkcja tworząca: inserter(coll, pos) Sebastian Deorowicz (PŚl) Algorytmy, iteratory, kolekcje niestandardowe / 83
18 Iteratory strumieniowe Opis Do tej pory jeśli chcieliśmy coś wypisać do strumienia (np. na standardowe wyjście), to dla każdego elementu wykonywaliśmy operację wypisywania do strumienia (operator <<) Iteratory strumieniowe pozwalają na iterowanie bezpośrednio po strumieniu Sebastian Deorowicz (PŚl) Algorytmy, iteratory, kolekcje niestandardowe / 83
19 Iteratory strumieniowe wyjściowe konstruktory ostream_iterator(ostream_type& s) Opis: Tworzy iterator strumieniowy operujący na strumieniu s ostream_iterator(ostream_type& s, const chart* delimiter) Opis: Tworzy iterator strumieniowy operujący na strumieniu s, przy czym separatorem będzie delimiter ostream_iterator(const ostream_iterator<t, chart, traits>& x) Opis: Konstruktor kopiujący Sebastian Deorowicz (PŚl) Algorytmy, iteratory, kolekcje niestandardowe / 83
20 Iteratory strumieniowe wyjściowe inne operacje ostream_iterator<t, chart, traits>& operator=(const T& value) Opis: Wypisuje wartość value do strumienia ostream_iterator<t, chart, traits>& operator*() Opis: Zwraca *this ostream_iterator<t, chart, traits>& operator++() ostream_iterator<t, chart, traits>& operator++(int) Opis: Inkrementacja pozycji Sebastian Deorowicz (PŚl) Algorytmy, iteratory, kolekcje niestandardowe / 83
21 Iteratory strumieniowe wejściowe Opis Podobnie jak istnieją iteratory strumieniowe wyjściowe tak też istnieją iteratory strumieniowe wejściowe Służą one do wczytywania danych ze strumienia Sebastian Deorowicz (PŚl) Algorytmy, iteratory, kolekcje niestandardowe / 83
22 Iteratory strumieniowe wejściowe konstruktory istream_iterator(istream_type& s) Opis: Tworzy iterator strumieniowy wejściowy dla strumienia s istream_iterator(const istream_iterator<t, chart, traits, Distance>& x) Opis: Konstruktor kopiujący Sebastian Deorowicz (PŚl) Algorytmy, iteratory, kolekcje niestandardowe / 83
23 Iteratory strumieniowe wejściowe inne operacje const T& operator*() const Opis: Odczytuje wartość ze strumienia const T* operator->() const Opis: Zwraca składową aktualnej wartości (wcześniej odczytanej) istream_iterator<t, chart, traits, Distance>& operator++() istream_iterator<t, chart, traits, Distance> operator++(int) Opis: Inkrementuje pozycję iteratora Inne Zdefiniowane operatory == i!= porównywania iteratorów Sebastian Deorowicz (PŚl) Algorytmy, iteratory, kolekcje niestandardowe / 83
24 Iteratory strumieniowe przykład #include <algorithm> #include <fstream> #include <iostream> #include <iterator> #include <list> #include <map> #include <string> #include <vector> using namespace std; typedef map<string, list<string> > t_dict; t_dict dict; struct sort_letters { inline void operator()(string& s) { string t(s); sort(t.begin(), t.end()); dict[t].push_back(s); }; }; struct longest_list { inline bool operator()(pair<string, list<string> > &x, pair<string, list<string> > &y) { return x.second.size() < y.second.size(); } }; int main(int argc, char* argv[]) { ifstream inf("slownik"); istream_iterator<string> inf_iter(inf); vector<string> vs(inf_iter, istream_iterator<string>()); for_each(vs.begin(), vs.end(), sort_letters()); t_dict::iterator m = max_element(dict.begin(), dict.end(), longest_list()); ostream_iterator<string> ouf_iter(cout, " "); copy(m->second.begin(), m->second.end(), ouf_iter); } Sebastian Deorowicz (PŚl) Algorytmy, iteratory, kolekcje niestandardowe / 83
25 Iteratory strumieniowe przykład Jakie będą wyniki dla słownika j. polskiego? akrom arkom karmo karom komar makro marko mokra morka rakom ramko Sebastian Deorowicz (PŚl) Algorytmy, iteratory, kolekcje niestandardowe / 83
26 Plan wykładu 1 Iteratory Funkcje pomocnicze iteratorów Iteratory odwrotne Iteratory wstawiające Iteratory strumieniowe 2 Algorytmy Algorytmy modyfikujące Algorytmy sortowania i pochodne Algorytmy zbiorowe Algorytmy kopcowe Algorytmy inne Algorytmy matematyczne 3 Kolekcje niestandardowe SGI STL, STLPort, Borland C++ Builder 6+ MS Visual C++ C++ TR1 Sebastian Deorowicz (PŚl) Algorytmy, iteratory, kolekcje niestandardowe / 83
27 Algorytmy replace if void replace_if(forwarditerator first, ForwardIterator last, Predicate pred, const T& new_value) Działanie: Zamienia wartość elementów z zakresu [first, last), dla których predykat pred zwrócił wartość true na new_value Parametry: first, last iteratory specyfikujące zakres pred predykat (obiekt funkcyjny bądź wskaźnik na funkcję) wykorzystywany do sprawdzenia czy element należy nadpisać new_value nowa wartość elementów Zwracana wartość: brak Złożoność: O(last first) Sebastian Deorowicz (PŚl) Algorytmy, iteratory, kolekcje niestandardowe / 83
28 Algorytm replace copy OutputIterator replace_copy(inputiterator first, InputIterator last, OutputIterator result, const T& old_value, const T& new_value) Działanie: Złożenie algorytmów replace i copy. Wykonuje kopiowanie elementów z zakresu [first, last) do zakresu rozpoczynającego się od result zamieniając jednocześnie wszystkie wystąpienia elementów old_value na new_value Parametry: first, last iteratory specyfikujące źródłowy zakres result iterator specyfikujący początek zakresu docelowego old_value wartość zamieniania new_value nowa wartość Zwracana wartość: Iterator do elementu bezpośrednio za ostatnim skopiowanym z zakresu docelowego Złożoność: O(last first) Uwaga: Zakresy źródłowy i docelowy nie powinny na siebie nachodzić Sebastian Deorowicz (PŚl) Algorytmy, iteratory, kolekcje niestandardowe / 83
29 Algorytm replace copy if OutputIterator replace_copy_if(inputiterator first, InputIterator last, OutputIterator result, Predicate pred, const T& new_value) Działanie: Złożenie algorytmów replace if i copy Parametry: first, last iteratory specyfikujące źródłowy zakres result iterator specyfikujący początek zakresu docelowego pred predykat (obiekt funkcyjny bądź wskaźnik na funkcję) wykorzystywany do sprawdzenia czy element należy nadpisać new_value nowa wartość Zwracana wartość: Iterator do elementu bezpośrednio za ostatnim skopiowanym z zakresu docelowego Złożoność: O(last first) Uwaga: Zakresy źródłowy i docelowy nie powinny na siebie nachodzić Sebastian Deorowicz (PŚl) Algorytmy, iteratory, kolekcje niestandardowe / 83
30 Algorytmy fill void fill(forwarditerator first, ForwardIterator last, const T& value) Działanie: Nadpisuje elementy z zakresu [first, last) wartością value Parametry: first, last iteratory specyfikujące źródłowy zakres value nowa wartość Zwracana wartość: brak Złożoność: O(last first) Sebastian Deorowicz (PŚl) Algorytmy, iteratory, kolekcje niestandardowe / 83
31 Algorytmy fill n void fill_n(outputiterator first, Size n, const T& value) Działanie: Wypełnia n elementów począwszy od pozycji first wartością value Parametry: first iterator specyfikujący początek zakresu n liczba elementów value nowa wartość Zwracana wartość: brak Złożoność: O(n) Uwaga: Brak kontroli zakresu Sebastian Deorowicz (PŚl) Algorytmy, iteratory, kolekcje niestandardowe / 83
32 Algorytmy generate void generate(forwarditerator first, ForwardIterator last, Generator gen) Działanie: Wypełnia elementy z zakresu [first, last) wartością zwracaną przez generator gen Parametry: first, last iteratory specyfikujące źródłowy zakres gen obiekt funkcyjny (bądź wskaźnik na funkcję) posiadający bezparametrową metodę operator() zwracającą wartość wstawianą do elementu; metoda jest wywoływana jednorazowo dla każdego elementu Zwracana wartość: brak Złożoność: O(last first) Sebastian Deorowicz (PŚl) Algorytmy, iteratory, kolekcje niestandardowe / 83
33 Algorytm generate n void generate_n(outputiterator first, Size n, Generator gen) Działanie: Wypełnia n elementów począwszy od pozycji first wartością zwracaną przez generator gen Parametry: first iterator specyfikujący początek zakresu n liczba elementów gen obiekt funkcyjny (bądź wskaźnik na funkcję) posiadający bezparametrową metodę operator() zwracającą wartość wstawianą do elementu; metoda jest wywoływana jednorazowo dla każdego elementu Zwracana wartość: brak Złożoność: O(n) Uwaga: Brak kontroli zakresu Sebastian Deorowicz (PŚl) Algorytmy, iteratory, kolekcje niestandardowe / 83
34 Algorytmy przykład Przykład #include <iostream> #include <vector> #include <algorithm> const int MAX = 10; using namespace std; template<class T> struct reader { inline T operator()() { T x; cin >> x; return x; } }; int main(int argc, char* argv[]) { int tab[max] = {1, 4, 3, 6, 7, 4, 7, 8, 9, 0}; vector<int> vi(tab, tab+max); ShowCollection(vi); // fill_n(vi.begin()+1, 3, 6); ShowCollection(vi); // } generate_n(vi.begin(), 2, reader<int>()); // 8 9 ShowCollection(vi); // Sebastian Deorowicz (PŚl) Algorytmy, iteratory, kolekcje niestandardowe / 83
35 Algorytm unique ForwardIterator unique(forwarditerator first, ForwardIterator last) Działanie: Usuwa powtarzające się elementy na kolejnych pozycjach pozostawiając tylko po jednej kopii Parametry: first, last iteratory specyfikujące źródłowy zakres Zwracana wartość: Iterator do pozycji bezpośrednio za ostatnią Złożoność: O(last first) Uwaga: Podobnie jak algorytm remove nie usuwa fizycznie tych elementów a jedynie nadpisuje je zwracając nowy logiczny koniec; elementy należy później usunąć za pomocą metody erase z kolekcji Sebastian Deorowicz (PŚl) Algorytmy, iteratory, kolekcje niestandardowe / 83
36 Algorytm unique ForwardIterator unique(forwarditerator first, ForwardIterator last, BinaryPredicate pred) Działanie: Usuwa powtarzające się elementy na kolejnych pozycjach pozostawiając tylko po jednej kopii Parametry: first, last iteratory specyfikujące źródłowy zakres pred predykat binarny wykorzystywany do porównywania element zamiast operatora == Zwracana wartość: Iterator do pozycji bezpośrednio za ostatnią Złożoność: O(last first) Uwaga: Podobnie jak algorytm remove nie usuwa fizycznie tych elementów a jedynie nadpisuje je zwracając nowy logiczny koniec; elementy należy później usunąć za pomocą metody erase z kolekcji Sebastian Deorowicz (PŚl) Algorytmy, iteratory, kolekcje niestandardowe / 83
37 Algorytm unique copy OutputIterator unique_copy(inputiterator first, InputIterator last, OutputIterator result) Działanie: Kopiuje elementy z zakresu źródłowego do docelowego pomijając wielokrotne powtórzenia tych samych elementów na kolejnych pozycjach Parametry: first, last iteratory specyfikujące źródłowy zakres źródłowy result iterator specyfikujący początek zakresu docelowego Zwracana wartość: Iterator do pozycji bezpośrednio za ostatnią z zakresu docelowego Złożoność: O(last first) Uwaga: Brak kontroli zakresu Sebastian Deorowicz (PŚl) Algorytmy, iteratory, kolekcje niestandardowe / 83
38 Algorytm unique copy OutputIterator unique_copy(inputiterator first, InputIterator last, OutputIterator result, BinaryPredicate pred) Działanie: Kopiuje elementy z zakresu źródłowego do docelowego pomijając wielokrotne powtórzenia tych samych elementów na kolejnych pozycjach Parametry: first, last iteratory specyfikujące źródłowy zakres źródłowy result iterator specyfikujący początek zakresu docelowego pred predykat używany do porównywania elementów zamiast operatora == Zwracana wartość: Iterator do pozycji bezpośrednio za ostatnią z zakresu docelowego Złożoność: O(last first) Uwaga: Brak kontroli zakresu Sebastian Deorowicz (PŚl) Algorytmy, iteratory, kolekcje niestandardowe / 83
39 Algorytmy partial sort copy RandomAccessIterator partial_sort_copy(inputiterator first, InputIterator last, RandomAccessIterator result_first, RandomAccessIterator result_last) Działanie: Umieszcza najmniejsze min(last first, result_last result_first) posortowanych elementów z zakresu źródłowego w zakresie docelowym Parametry: first, last iteratory specyfikujące zakres źródłowy result_first, result_last iteratory specyfikujące zakres docelowy Zwracana wartość: Iterator do elementu bezpośrednio za ostatnim wpisanym do zakresu docelowego Złożoność: O(n log k), gdzie n jest liczbą elementów w zakresie źródłowym, a k jest liczbą posortowanych elementów Sebastian Deorowicz (PŚl) Algorytmy, iteratory, kolekcje niestandardowe / 83
40 Algorytmy partial sort copy RandomAccessIterator partial_sort_copy(inputiterator first, InputIterator last, RandomAccessIterator result_first, RandomAccessIterator result_last, Compare comp) Działanie: Umieszcza najmniejsze min(last first, result_last result_first) posortowanych elementów z zakresu źródłowego w zakresie docelowym Parametry: first, last iteratory specyfikujące zakres źródłowy result_first, result_last iteratory specyfikujące zakres docelowy comp predykat używany do porównywania elementów zamiast operatora < Zwracana wartość: Iterator do elementu bezpośrednio za ostatnim wpisanym do zakresu docelowego Złożoność: O(n log k), gdzie n jest liczbą elementów w zakresie źródłowym, a k jest liczbą posortowanych elementów Sebastian Deorowicz (PŚl) Algorytmy, iteratory, kolekcje niestandardowe / 83
41 Algorytmy nth element void nth_element(randomaccessiterator first, RandomAccessIterator nth, RandomAccessIterator last) void nth_element(randomaccessiterator first, RandomAccessIterator nth, RandomAccessIterator last, Compare comp) Działanie: Częściowo sortuje elementy, aby na pozycji n znalazł się element n-ty co do wielkości, wszystkie elementy niewiększe od niego były na wcześniejszych pozycjach, a wszystkie niemniejsze na późniejszych Parametry: first, last iteratory specyfikujące zakres nth iterator specyfikujący n-ty element comp predykat binarny (obiekt funkcyjny bądź wskaźnik na funkcję) stosowany do porównywania elementów zamiast operatora < Zwracana wartość: brak Złożoność: O(last first) w przypadku średnim Sebastian Deorowicz (PŚl) Algorytmy, iteratory, kolekcje niestandardowe / 83
42 Algorytmy lower bound ForwardIterator lower_bound(forwarditerator first, ForwardIterator last, const T& value) ForwardIterator lower_bound(forwarditerator first, ForwardIterator last, const T& value, Compare comp) Działanie: Wyszukuje pierwszą pozycję o wartości elementu niemniejszej niż value w zakresie [first, last) Parametry: first, last iteratory specyfikujące zakres value wyszukiwana wartość comp predykat binarny (obiekt funkcyjny bądź wskaźnik na funkcję) stosowany przy wyszukiwaniu zamiast operatora < Zwracana wartość: Iterator do znalezionej pozycji Złożoność: O(log(last first)) Uwaga: działa tylko dla posortowanych zakresów Sebastian Deorowicz (PŚl) Algorytmy, iteratory, kolekcje niestandardowe / 83
43 Algorytmy upper bound ForwardIterator upper_bound(forwarditerator first, ForwardIterator last, const T& value) ForwardIterator upper_bound(forwarditerator first, ForwardIterator last, const T& value, Compare comp) Działanie: Wyszukuje pierwszą pozycję o wartości elementu większej niż value w zakresie [first, last) Parametry: first, last iteratory specyfikujące zakres value wyszukiwana wartość comp predykat binarny (obiekt funkcyjny bądź wskaźnik na funkcję) stosowany przy wyszukiwaniu zamiast operatora < Zwracana wartość: Iterator do znalezionej pozycji Złożoność: O(log(last first)) Uwaga: działa tylko dla posortowanych zakresów Sebastian Deorowicz (PŚl) Algorytmy, iteratory, kolekcje niestandardowe / 83
44 Algorytmy equal range pair<forwarditerator, ForwardIterator> equal_range(forwarditerator first, ForwardIterator last, const T& value) pair<forwarditerator, ForwardIterator> equal_range(forwarditerator first, ForwardIterator last,const T& value, Compare comp) Działanie: Wyszukuje zakres elementów o wartościach równych value w zakresie [first, last) Parametry: first, last iteratory specyfikujące zakres value wyszukiwana wartość comp predykat binarny (obiekt funkcyjny bądź wskaźnik na funkcję) stosowany przy wyszukiwaniu zamiast operatora < Zwracana wartość: Para iteratorów, z których pierwszy wskazuje na pierwszy element sekwencji równy value, a drugi na pierwszy element za ostatnim elementem sekwencji równym value Złożoność: O(log(last first)) Uwaga: działa tylko dla posortowanych zakresów Sebastian Deorowicz (PŚl) Algorytmy, iteratory, kolekcje niestandardowe / 83
45 Algorytmy binary search bool binary_search(forwarditerator first, ForwardIterator last, const T& value) bool binary_search(forwarditerator first, ForwardIterator last, const T& value, Compare comp) Działanie: Sprawdza czy element o wartości value występuje w zakresie [first, last) Parametry: first, last iteratory specyfikujące zakres value wyszukiwana wartość comp predykat binarny (obiekt funkcyjny bądź wskaźnik na funkcję) stosowany przy wyszukiwaniu zamiast operatora < Zwracana wartość: true jeśli element został znaleziony, false w przeciwnym przypadku Złożoność: O(log(last first)) Uwaga: działa tylko dla posortowanych zakresów Sebastian Deorowicz (PŚl) Algorytmy, iteratory, kolekcje niestandardowe / 83
46 Algorytmy merge OutputIterator merge(inputiterator1 first1, InputIterator1 last1, InputIterator2 first2, InputIterator2 last2, OutputIterator result) Działanie: Łączy dwa posortowane zakresy, [first1, last1) oraz [first2, last2), w jeden posortowany zakres zaczynający się od pozycji result Parametry: first1, last1, first2, last2 iteratory specyfikujące zakresy źródłowe result iterator specyfikujący początek zakresu docelowego Zwracana wartość: Iterator do pierwszego elementu za ostatnim w docelowym zakresie Złożoność: O((last1 first1) + (last2 first2)) Uwaga: Zakres docelowy nie powinien się nakładać z żadnym z zakresów źródłowych Zakres docelowy musi być dostatecznie duży (brak kontroli zakresów) Zakresy źródłowe nie są modyfikowane Sebastian Deorowicz (PŚl) Algorytmy, iteratory, kolekcje niestandardowe / 83
47 Algorytmy merge OutputIterator merge(inputiterator1 first1, InputIterator1 last1, InputIterator2 first2, InputIterator2 last2, OutputIterator result, Compare comp) Działanie: Łączy dwa posortowane zakresy, [first1, last1) oraz [first2, last2), w jeden posortowany zakres zaczynający się od pozycji result Parametry: first1, last1, first2, last2 iteratory specyfikujące zakresy źródłowe result iterator specyfikujący początek zakresu docelowego comp predykat binarny (obiekt funkcyjny bądź wskaźnik na funkcję) stosowany przy porównywaniu elementów zamiast operatora < Zwracana wartość: Iterator do pierwszego elementu za ostatnim w docelowym zakresie Złożoność: O((last1 first1) + (last2 first2)) Uwaga: Zakres docelowy nie powinien się nakładać z żadnym z zakresów źródłowych Zakres docelowy musi być dostatecznie duży (brak kontroli zakresów) Zakresy źródłowe nie są modyfikowane Sebastian Deorowicz (PŚl) Algorytmy, iteratory, kolekcje niestandardowe / 83
48 Algorytmy przykład Przykład #include <algorithm> #include <list> #include <vector> const int MAX = 10; using namespace std; int main(int argc, char* argv[]) { int tab[10] = {1, 4, 3, 6, 7, 4, 7, 4, 9, 0}; vector<int> vi1(tab, tab+5); list<int> li2(tab+5, tab+max); vector<int> vi3(10, 0); } ShowCollection(vi1); // ShowCollection(li2); // merge(vi1.begin(), vi1.end(), li2.begin(), li2.end(), vi3.begin()); ShowCollection(vi3); // sort(vi1.begin(), vi1.end()); li2.sort(); merge(vi1.begin(), vi1.end(), li2.begin(), li2.end(), vi3.begin()); ShowCollection(vi3); // vector<int>::iterator new_end = unique(vi3.begin(), vi3.end()); ShowCollection(vi3); // vi3.erase(new_end, vi3.end()); ShowCollection(vi3); // Sebastian Deorowicz (PŚl) Algorytmy, iteratory, kolekcje niestandardowe / 83
49 Algorytmy inplace merge void inplace_merge(bidirectionaliterator first, BidirectionalIterator middle, BidirectionalIterator last) void inplace_merge(bidirectionaliterator first, BidirectionalIterator middle, BidirectionalIterator last, Compare comp) Działanie: Łączy dwa sąsiednie posortowane zakresy, [first, middle) oraz [middle, last), umieszczając wynik w zakresie [first, last) Parametry: first, middle, last iteratory specyfikujące zakresy comp predykat binarny (obiekt funkcyjny bądź wskaźnik na funkcję) stosowany przy porównywaniu elementów zamiast operatora < Zwracana wartość: Brak Złożoność: O(n) jeśli jest dostępne wystarczająco dużo dodatkowej pamięci (n łączna liczba elementów) O(n log n) jeśli jest dostępne wystarczająco dużo dodatkowej pamięci (n łączna liczba elementów) Sebastian Deorowicz (PŚl) Algorytmy, iteratory, kolekcje niestandardowe / 83
50 Algorytmy zbiorowe includes bool includes(inputiterator1 first1, InputIterator1 last1, InputIterator2 first2, InputIterator2 last2) bool includes(inputiterator1 first1, InputIterator1 last1, InputIterator2 first2, InputIterator2 last2, Compare comp) Działanie: Sprawdza czy wszystkie elementy zakresu [first2, last2) występują w zakresie [first1, last1) Parametry: first1, last1, first2, last2 iteratory specyfikujące zakresy comp predykat binarny (obiekt funkcyjny bądź wskaźnik na funkcję) stosowany przy porównywaniu elementów zamiast operatora < Zwracana wartość: true jeśli wszystkie elementy drugiego zakresu występują w większym Złożoność: O((last1 first1) + (last2 first2)) Uwaga: Jeśli drugi zakres zawiera kilka wystąpień tego samego elementu, to pierwszy zakres musi zawierać przynajmniej tyle samo wystąpień tego elementu, żeby wynikiem mogło być true Sebastian Deorowicz (PŚl) Algorytmy, iteratory, kolekcje niestandardowe / 83
51 Algorytmy zbiorowe set union OutputIterator set_union(inputiterator1 first1, InputIterator1 last1, InputIterator2 first2, InputIterator2 last2, OutputIterator result) Działanie: Łączy dwa zakresy, [first1, last1) oraz [first2, last2), traktując je jak posortowane zbiory do zakresu docelowego element zostaje wpisany jeśli występuje w przynajmniej jednym z zakresów. Liczba wystąpień każdego z elementów w zakresie docelowym jest większą z liczb wystąpień w zakresach źródłowych. Wynik zapisuje w zakresie rozpoczynającym się od result. Parametry: first1, last1, first2, last2 iteratory specyfikujące zakresy źródłowe result początek zakresu docelowego Zwracana wartość: Iterator do pozycji za ostatnią w zakresie docelowym Złożoność: O((last1 first1) + (last2 first2)) Uwaga: brak kontroli zakresu (zakres docelowy musi być dostatecznie duży) Sebastian Deorowicz (PŚl) Algorytmy, iteratory, kolekcje niestandardowe / 83
52 Algorytmy zbiorowe set union OutputIterator set_union(inputiterator1 first1, InputIterator1 last1, InputIterator2 first2, InputIterator2 last2, OutputIterator result, Compare comp) Działanie: Łączy dwa zakresy, [first1, last1) oraz [first2, last2), traktując je jak posortowane zbiory do zakresu docelowego element zostaje wpisany jeśli występuje w przynajmniej jednym z zakresów. Liczba wystąpień każdego z elementów w zakresie docelowym jest większą z liczb wystąpień w zakresach źródłowych. Wynik zapisuje w zakresie rozpoczynającym się od result. Parametry: first1, last1, first2, last2 iteratory specyfikujące zakresy źródłowe result początek zakresu docelowego comp predykat binarny (obiekt funkcyjny bądź wskaźnik na funkcję) stosowany przy porównywaniu elementów zamiast operatora < Zwracana wartość: Iterator do pozycji za ostatnią w zakresie docelowym Złożoność: O((last1 first1) + (last2 first2)) Uwaga: brak kontroli zakresu (zakres docelowy musi być dostatecznie duży) Sebastian Deorowicz (PŚl) Algorytmy, iteratory, kolekcje niestandardowe / 83
53 Algorytmy zbiorowe set intersection OutputIterator set_intersection(inputiterator1 first1, InputIterator1 last1, InputIterator2 first2, InputIterator2 last2, OutputIterator result) Działanie: Wykonuje przecięcie dwóch zakresów, [first1, last1) oraz [first2, last2), traktując je jak posortowane zbiory do zakresu docelowego element zostaje wpisany jeśli występuje w obydwu z zakresów. Liczba wystąpień każdego z elementów w zakresie docelowym jest mniejszą z liczb wystąpień w zakresach źródłowych. Wynik zapisuje w zakresie rozpoczynającym się od result. Parametry: first1, last1, first2, last2 iteratory specyfikujące zakresy źródłowe result początek zakresu docelowego Zwracana wartość: Iterator do pozycji za ostatnią w zakresie docelowym Złożoność: O((last1 first1) + (last2 first2)) Uwaga: brak kontroli zakresu (zakres docelowy musi być dostatecznie duży) Sebastian Deorowicz (PŚl) Algorytmy, iteratory, kolekcje niestandardowe / 83
54 Algorytmy zbiorowe set intersection OutputIterator set_intersection(inputiterator1 first1, InputIterator1 last1, InputIterator2 first2, InputIterator2 last2, OutputIterator result, Compare comp) Działanie: Wykonuje przecięcie dwóch zakresów, [first1, last1) oraz [first2, last2), traktując je jak posortowane zbiory do zakresu docelowego element zostaje wpisany jeśli występuje w obydwu z zakresów. Liczba wystąpień każdego z elementów w zakresie docelowym jest mniejszą z liczb wystąpień w zakresach źródłowych. Wynik zapisuje w zakresie rozpoczynającym się od result. Parametry: first1, last1, first2, last2 iteratory specyfikujące zakresy źródłowe result początek zakresu docelowego comp predykat binarny (obiekt funkcyjny bądź wskaźnik na funkcję) stosowany przy porównywaniu elementów zamiast operatora < Zwracana wartość: Iterator do pozycji za ostatnią w zakresie docelowym Złożoność: O((last1 first1) + (last2 first2)) Uwaga: brak kontroli zakresu (zakres docelowy musi być dostatecznie duży) Sebastian Deorowicz (PŚl) Algorytmy, iteratory, kolekcje niestandardowe / 83
55 Algorytmy zbiorowe set difference OutputIterator set_difference(inputiterator1 first1, InputIterator1 last1, InputIterator2 first2, InputIterator2 last2, OutputIterator result) Działanie: Oblicza różnicę dwóch zakresów, [first1, last1) oraz [first2, last2), traktując je jak posortowane zbiory do zakresu docelowego element zostaje wpisany jeśli występuje w pierwszym zakresie, ale nie występuje w drugim. Liczba wystąpień każdego z elementów w zakresie docelowym jest liczbą wystąpień w pierwszym zakresie pomniejszoną o liczbę wystąpień w drugim zakresie (bądź zerem). Wynik zapisuje w zakresie rozpoczynającym się od result. Parametry: first1, last1, first2, last2 iteratory specyfikujące zakresy źródłowe result początek zakresu docelowego Zwracana wartość: Iterator do pozycji za ostatnią w zakresie docelowym Złożoność: O((last1 first1) + (last2 first2)) Uwaga: brak kontroli zakresu (zakres docelowy musi być dostatecznie duży) Sebastian Deorowicz (PŚl) Algorytmy, iteratory, kolekcje niestandardowe / 83
56 Algorytmy zbiorowe set difference OutputIterator set_difference(inputiterator1 first1, InputIterator1 last1, InputIterator2 first2, InputIterator2 last2, OutputIterator result, Compare comp) Działanie: Oblicza różnicę dwóch zakresów, [first1, last1) oraz [first2, last2), traktując je jak posortowane zbiory do zakresu docelowego element zostaje wpisany jeśli występuje w pierwszym zakresie, ale nie występuje w drugim. Liczba wystąpień każdego z elementów w zakresie docelowym jest liczbą wystąpień w pierwszym zakresie pomniejszoną o liczbę wystąpień w drugim zakresie (bądź zerem). Wynik zapisuje w zakresie rozpoczynającym się od result. Parametry: first1, last1, first2, last2 iteratory specyfikujące zakresy źródłowe result początek zakresu docelowego comp predykat binarny (obiekt funkcyjny bądź wskaźnik na funkcję) stosowany przy porównywaniu elementów zamiast operatora < Zwracana wartość: Iterator do pozycji za ostatnią w zakresie docelowym Złożoność: O((last1 first1) + (last2 first2)) Uwaga: brak kontroli zakresu (zakres docelowy musi być dostatecznie duży) Sebastian Deorowicz (PŚl) Algorytmy, iteratory, kolekcje niestandardowe / 83
57 Algorytmy zbiorowe set symmetric difference OutputIterator set_symmetric_difference(inputiterator1 first1, InputIterator1 last1, InputIterator2 first2, InputIterator2 last2, OutputIterator result) Działanie: Oblicza symetryczną różnicę dwóch zakresów, [first1, last1) oraz [first2, last2), traktując je jak posortowane zbiory do zakresu docelowego element zostaje wpisany jeśli występuje w dokładnie jednym z zakresów źródłowych. Liczba wystąpień każdego z elementów w zakresie docelowym jest różnicą liczby wystąpień w zakresach źródłowych (bądź zerem). Wynik zapisuje w zakresie rozpoczynającym się od result. Parametry: first1, last1, first2, last2 iteratory specyfikujące zakresy źródłowe result początek zakresu docelowego Zwracana wartość: Iterator do pozycji za ostatnią w zakresie docelowym Złożoność: O((last1 first1) + (last2 first2)) Uwaga: brak kontroli zakresu (zakres docelowy musi być dostatecznie duży) Sebastian Deorowicz (PŚl) Algorytmy, iteratory, kolekcje niestandardowe / 83
58 Algorytmy zbiorowe set symmetric difference OutputIterator set_symmetric_difference(inputiterator1 first1, InputIterator1 last1, InputIterator2 first2, InputIterator2 last2, OutputIterator result, Compare comp) Działanie: Oblicza symetryczną różnicę dwóch zakresów, [first1, last1) oraz [first2, last2), traktując je jak posortowane zbiory do zakresu docelowego element zostaje wpisany jeśli występuje w dokładnie jednym z zakresów źródłowych. Liczba wystąpień każdego z elementów w zakresie docelowym jest różnicą liczby wystąpień w zakresach źródłowych (bądź zerem). Wynik zapisuje w zakresie rozpoczynającym się od result. Parametry: first1, last1, first2, last2 iteratory specyfikujące zakresy źródłowe result początek zakresu docelowego comp predykat binarny (obiekt funkcyjny bądź wskaźnik na funkcję) stosowany przy porównywaniu elementów zamiast operatora < Zwracana wartość: Iterator do pozycji za ostatnią w zakresie docelowym Złożoność: O((last1 first1) + (last2 first2)) Uwaga: brak kontroli zakresu (zakres docelowy musi być dostatecznie duży) Sebastian Deorowicz (PŚl) Algorytmy, iteratory, kolekcje niestandardowe / 83
59 Algorytmy przykład Przykład #include <list> #include <vector> #include <algorithm> using namespace std; int main(int argc, char* argv[]) { string inf[] = {"PK1", "TA", "Mat", "Fiz", "Fil"}; string zarz[] = {"Eko", "WF", "Mat", "Ang", "Fil"}; vector<string> vi(inf, inf+5); vector<string> vz(zarz, zarz+5); list<string> lr; back_insert_iterator<list<string> > iter(lr); sort(vi.begin(), vi.end()); sort(vz.begin(), vz.end()); } // Lacznie przedmioty set_union(vi.begin(), vi.end(), vz.begin(), vz.end(), iter); ShowCollection(lr); // Ang Eko Fil Fiz Mat PK1 TA WF // Powtorzone przedmioty lr.clear(); set_intersection(vi.begin(), vi.end(), vz.begin(), vz.end(), iter); ShowCollection(lr); // Fil Mat // Tylko inf lr.clear(); set_difference(vi.begin(), vi.end(), vz.begin(), vz.end(), iter); ShowCollection(lr); // Fiz PK1 TA Sebastian Deorowicz (PŚl) Algorytmy, iteratory, kolekcje niestandardowe / 83
60 Algorytmy kopcowe push heap void make_heap(randomaccessiterator first, RandomAccessIterator last) void make_heap(randomaccessiterator first, RandomAccessIterator last, Compare comp) Działanie: Przekształca zakres [first, last) w taki sposób, aby zawierał on elementy uporządkowane w postaci kopca Parametry: first, last iteratory specyfikujące zakres comp predykat binarny (obiekt funkcyjny bądź wskaźnik na funkcję) stosowany zamiast operatora < jako relacja mniejszości Zwracana wartość: brak Złożoność: O(last first) Sebastian Deorowicz (PŚl) Algorytmy, iteratory, kolekcje niestandardowe / 83
61 Algorytmy kopcowe pop heap void pop_heap(randomaccessiterator first, RandomAccessIterator last) void pop_heap(randomaccessiterator first, RandomAccessIterator last, Compare comp) Działanie: Zamienia pierwszy element zakresu [first, last) z ostatnim i z elementów [first, last 1) tworzy kopiec Parametry: first, last iteratory specyfikujące zakres comp predykat binarny (obiekt funkcyjny bądź wskaźnik na funkcję) stosowany zamiast operatora < jako relacja mniejszości Zwracana wartość: brak Złożoność: O(log(last first)) Uwaga: Przed wykonaniem algorytmu zakres [first, last) musi zawierać poprawny kopiec Sebastian Deorowicz (PŚl) Algorytmy, iteratory, kolekcje niestandardowe / 83
62 Algorytmy kopcowe make heap void push_heap(randomaccessiterator first, RandomAccessIterator last) void push_heap(randomaccessiterator first, RandomAccessIterator last, Compare comp) Działanie: Dodaje element znajdujący się na pozycji last 1 do kopca znajdującego się w zakresie [first, last 1). Po wykonaniu algorytmu zakres [first, last) zawiera poprawny kopiec Parametry: first, last iteratory specyfikujące zakres comp predykat binarny (obiekt funkcyjny bądź wskaźnik na funkcję) stosowany zamiast operatora < jako relacja mniejszości Zwracana wartość: brak Złożoność: O(log(last first)) Uwaga: Przed wykonaniem algorytmu zakres [first, last 1) musi zawierać poprawny kopiec Sebastian Deorowicz (PŚl) Algorytmy, iteratory, kolekcje niestandardowe / 83
63 Algorytmy kopcowe sort heap void sort_heap(randomaccessiterator first, RandomAccessIterator last) void sort_heap(randomaccessiterator first, RandomAccessIterator last, Compare comp) Działanie: Sortuje elementy z zakresu [first, last) zawierającego kopiec Parametry: first, last iteratory specyfikujące zakres comp predykat binarny (obiekt funkcyjny bądź wskaźnik na funkcję) stosowany zamiast operatora < jako relacja mniejszości Zwracana wartość: brak Złożoność: O(n log n), gdzie n = last first Uwaga: Przed wykonaniem algorytmu zakres [first, last) musi zawierać poprawny kopiec Sebastian Deorowicz (PŚl) Algorytmy, iteratory, kolekcje niestandardowe / 83
64 Algorytmy przykład Przykład #include <vector> #include <algorithm> const int MAX = 9; using namespace std; int main(int argc, char* argv[]) { int tab[max] = {3, 5, 1, 4, 2, 9, 8, 6, 0}; vector<int> vi(tab, tab+max); ShowCollection(vi); // make_heap(vi.begin(), vi.end()); ShowCollection(vi); // pop_heap(vi.begin(), vi.end()); ShowCollection(vi); // *vi.rbegin() = 7; push_heap(vi.begin(), vi.end()); ShowCollection(vi); // } sort_heap(vi.begin(), vi.end()); ShowCollection(vi); // Sebastian Deorowicz (PŚl) Algorytmy, iteratory, kolekcje niestandardowe / 83
65 Algorytmy lexicographical compare bool bool lexicographical_compare(inputiterator1 first1, InputIterator1 last1, InputIterator2 first2, InputIterator2 last2) lexicographical_compare(inputiterator1 first1, InputIterator1 last1, InputIterator2 first2, InputIterator2 last2, Compare comp) Działanie: Sprawdza czy elementy zakresu [first1, last1) są leksykograficznie mniejsze od elementów zakresu [first2, last2) Parametry: first1, last1, first2, last2 iteratory specyfikujące zakresy comp predykat binarny (obiekt funkcyjny bądź wskaźnik na funkcję) stosowany zamiast operatora < jako relacja mniejszości Zwracana wartość: true jeśli pierwszy zakres zawiera elementy leksykograficznie mniejsze od elementów drugiego zakresu Złożoność: O(min(last1 first1, last2 first2)) Sebastian Deorowicz (PŚl) Algorytmy, iteratory, kolekcje niestandardowe / 83
66 Algorytmy matematyczne accumulate T accumulate(inputiterator first, InputIterator last, T init) Działanie: Wyznacza sumę wszystkich elementów zakresu [first, last) oraz wartości init Parametry: first, last iteratory specyfikujące zakres init wartość dodawana do sumy wszystkich elementów Zwracana wartość: Suma wszystkich elementów zakresu i wartości init Złożoność: O(last first) Sebastian Deorowicz (PŚl) Algorytmy, iteratory, kolekcje niestandardowe / 83
67 Algorytmy matematyczne accumulate T accumulate(inputiterator first, InputIterator last, T init) T accumulate(inputiterator first, InputIterator last, T init, BinaryOperation binary_op) Działanie: Oblicza wynik działania init = binary_op(init, *i) wykonywanego kolejno dla wszystkich elementów z zakresu [first, last) Parametry: first, last iteratory specyfikujące zakres init wartość początkowa binary_op predykat binarny (obiekt funkcyjny bądź wskaźnik na funkcję) wykonywany zamiast sumowania elementów Zwracana wartość: Wynik działania predykatu binarnego dla kolejnych elementów Złożoność: O(last first) Sebastian Deorowicz (PŚl) Algorytmy, iteratory, kolekcje niestandardowe / 83
68 Algorytmy matematyczne inner product T inner_product(inputiterator1 first1, InputIterator1 last1, InputIterator2 first2, T init) Działanie: Oblicza wartość iloczynu skalarnego zakresu [first1, last1) oraz zakresu rozpoczynającego się od first2 powiększoną o wartość init Parametry: first1, last1, first2 iteratory specyfikujące zakresy init wartość dodawana do sumy wszystkich elementów zakresu Zwracana wartość: Wartość iloczynu skalarnego powiększona o init Złożoność: O(last1 first1) Uwaga: Brak kontroli zakresów (drugi zakres musi być dostatecznie duży) Sebastian Deorowicz (PŚl) Algorytmy, iteratory, kolekcje niestandardowe / 83
69 Algorytmy matematyczne inner product T inner_product(inputiterator1 first1, InputIterator1 last1, InputIterator2 first2, T init, BinaryOperation1 binary_op1, BinaryOperation2 binary_op2) Działanie: Oblicza wartość iloczynu skalarnego zakresu [first1, last1) oraz zakresu rozpoczynającego się od first2 powiększoną o wartość init przy czym zamiast operacji mnożenia elementów wykonywany jest binarny predykat binary_op2 a zamiast operacji dodawania wykonywany jest predykat binary_op1 Parametry: first1, last1, first2 iteratory specyfikujące zakresy init wartość dodawana do sumy wszystkich elementów zakresu binary_op1 binarny predykat wykonywany zamiast dodawania binary_op2 binarny predykat wykonywany zamiast mnożenia Zwracana wartość: Wartość iloczynu skalarnego powiększona o init Złożoność: O(last1 first1) Uwaga: Brak kontroli zakresów (drugi zakres musi być dostatecznie duży) Sebastian Deorowicz (PŚl) Algorytmy, iteratory, kolekcje niestandardowe / 83
70 Algorytmy matematyczne partial sum OutputIterator partial_sum(inputiterator first, InputIterator last, OutputIterator result) OutputIterator partial_sum(inputiterator first, InputIterator last, OutputIterator result, BinaryOperation binary_op) Działanie: Oblicza sumy częściowe dla zakresu [first, last) a wyniki zapisuje do zakresu rozpoczynającego się od result, tj. i ty element zakresu docelowego zawiera sumę elementów od początkowego do i-tego z zakresu źródłowego Parametry: first, last, result iteratory specyfikujące zakresy binary_op binarny predykat (obiekt funkcyjny bądź wskaźnik na funkcję) wykonywany zamiast operacji dodawania Zwracana wartość: Iterator do pozycji za ostatnią z zakresu docelowego Złożoność: O(last first) Uwaga: Brak kontroli zakresów (drugi zakres musi być dostatecznie duży) Sebastian Deorowicz (PŚl) Algorytmy, iteratory, kolekcje niestandardowe / 83
71 Algorytmy matematyczne adjacent difference OutputIterator adjacent_difference(inputiterator first, InputIterator last, OutputIterator result) OutputIterator adjacent_difference(inputiterator first, InputIterator last, OutputIterator result, BinaryOperation binary_op) Działanie: Dla każdego elementu z zakresu [first, last) oblicza różnicę między tym elementem i elementem poprzednim, a wynik zapisuje do zakresu docelowego rozpoczynającego się od result. Ponieważ pierwszy element nie ma poprzednika, to jest on kopiowany do zakresu docelowego Parametry: first, last, result iteratory specyfikujące zakresy binary_op binarny predykat (obiekt funkcyjny bądź wskaźnik na funkcję) wykonywany zamiast operacji odejmowania Zwracana wartość: Iterator do pozycji za ostatnią z zakresu docelowego Złożoność: O(last first) Uwaga: Brak kontroli zakresów (drugi zakres musi być dostatecznie duży) Sebastian Deorowicz (PŚl) Algorytmy, iteratory, kolekcje niestandardowe / 83
72 Plan wykładu 1 Iteratory Funkcje pomocnicze iteratorów Iteratory odwrotne Iteratory wstawiające Iteratory strumieniowe 2 Algorytmy Algorytmy modyfikujące Algorytmy sortowania i pochodne Algorytmy zbiorowe Algorytmy kopcowe Algorytmy inne Algorytmy matematyczne 3 Kolekcje niestandardowe SGI STL, STLPort, Borland C++ Builder 6+ MS Visual C++ C++ TR1 Sebastian Deorowicz (PŚl) Algorytmy, iteratory, kolekcje niestandardowe / 83
Programowanie i struktury danych
Programowanie i struktury danych 1 / 30 STL Standard Template Library, STL (ang. = Standardowa Biblioteka Wzorców) biblioteka C++ zawierająca szablony (wzorce), które umożliwiają wielokrotne użycie. Główne
Bardziej szczegółowoSTL: Lekcja 1&2. Filozofia STL
STL: Lekcja 1&2 Tematy: Filozofia STL Po co nam STL? Podstawowa zawartość STL Co warto znać zanim zaczniemy pracę z STL?: wskaźniki Praca na tekstach: klasa String Vector: nowy wymiar standardowych tablic.
Bardziej szczegółowoSTL: kontenery. STL: kontenery. STL: kontenery. Typy kontenerów STL. STL: kontenery. STL: kontenery. multimap. Kontener map: przykład zadanie:
Kontener map: przykład zadanie: Jak policzyć liczby różnych słów występujących w tekście? Rozwiązanie: Potrzebny jest kontener, który będzie zawierał listę różnych słów (tj. listę bez powtórzeń), która
Bardziej szczegółowoCzęść 4 życie programu
1. Struktura programu c++ Ogólna struktura programu w C++ składa się z kilku części: część 1 część 2 część 3 część 4 #include int main(int argc, char *argv[]) /* instrukcje funkcji main */ Część
Bardziej szczegółowoAlgorytmy w C++ dla opornych!
Algorytmy w C++ dla opornych! 02.10.2011 Opracował: Krzysztof Rudlicki W-ce przewodniczący SKN TeamBit krudlicki@future-processing.com O czym będę przynudzał: O - Dlaczego będę przynudzał? O - Vector A
Bardziej szczegółowoZaawansowane programowanie w języku C++ Biblioteka standardowa
Zaawansowane programowanie w języku C++ Biblioteka standardowa Prezentacja jest współfinansowana przez Unię Europejską w ramach Europejskiego Funduszu Społecznego w projekcie pt. Innowacyjna dydaktyka
Bardziej szczegółowoAlgorytmy i Struktury Danych. Anna Paszyńska
Algorytmy i Struktury Danych Anna Paszyńska Tablica dynamiczna szablon Array Zbiory Zbiory template class Container {public: virtual ~Container() { }; virtual int Count() const = 0;
Bardziej szczegółowoSTL: algorytmy sortujące. STL: algorytmy sortujące. STL: algorytmy sortujące. STL: algorytmy sortujące. STL: algorytmy sortujące
1. partition 2. stable_partition 3. sort 4. stable_sort 5. partial_sort 6. partial_sort_copy 7. nth_element 8. lower_bound 9. upper_bound 10.equal_range 11.binary_search 12.merge 13.inplace_merge 14.includes
Bardziej szczegółowoParadygmaty programowania
Paradygmaty programowania Programowanie generyczne w C++ Dr inż. Andrzej Grosser Cz estochowa, 2016 2 Spis treści 1. Zadanie 3 5 1.1. Wprowadzenie.................................. 5 1.2. Obiekty funkcyjne................................
Bardziej szczegółowoSTL: algorytmy sortujące. STL: algorytmy sortujące. STL: algorytmy sortujące. STL: algorytmy sortujące. STL: algorytmy sortujące
1. partition 2. stable_partition 3. sort 4. stable_sort 5. partial_sort 6. partial_sort_copy 7. nth_element 8. lower_bound 9. upper_bound 10.equal_range 11.binary_search 12.merge 13.inplace_merge 14.includes
Bardziej szczegółowoWstęp do programowania obiektowego. STL - Standard Template Library
Wstęp do programowania obiektowego STL - Standard Template Library 1 STL z ang. Standard Template Library, (pol. standardowa biblioteka szablonów) biblioteka C++ zawierająca pojemniki, iteratory, algorytmy,
Bardziej szczegółowoSTL: kontenery. Typy kontenerów STL. STL: kontenery. STL: kontenery. STL: kontenery. Typy kontenerów STL. deque (double-ended queue) list
Kontenery sekwencyjne: deque (kolejka dwustronna) deque (double-ended queue) implementacja kontenera zoptymalizowana pod kątem efektywności operacji dołączania i usuwania elementów z sekwencji na obu jej
Bardziej szczegółowoSTL Standardt Template Library (wprowadzenie)
STL Standardt Template Library (wprowadzenie) Biblioteka standardowych szablonów na dzień dzisiejszy stanowi jedną z najpotężniejszych możliwości języka C++ Zawiera szablony klas ogólnego przeznaczenia
Bardziej szczegółowoobiekty funkcyjne - funktory
#include #include #include #include #include #include #include #include #include #include using namespace
Bardziej szczegółowoProgramowanie w C++ Wykład 6. Katarzyna Grzelak. 1 kwietnia K.Grzelak (Wykład 6) Programowanie w C++ 1 / 43
Programowanie w C++ Wykład 6 Katarzyna Grzelak 1 kwietnia 2019 K.Grzelak (Wykład 6) Programowanie w C++ 1 / 43 Pojęcia z poprzednich wykładów Tablica to ciag obiektów tego samego typu, zajmujacy ciagły
Bardziej szczegółowoProgramowanie komputerowe. Zajęcia 5
Programowanie komputerowe Zajęcia 5 Tablice wielowymiarowe Tablicę dwuwymiarową możemy deklarować statycznie: typ nazwa[rozmiar1][rozmiar2]; Ma ona elementy nazwa[i][j] dla i=0,,rozmiar1-1, j=0,...,rozmiar2-1.
Bardziej szczegółowoProgramowanie w C++ Wykład 7. Katarzyna Grzelak. 23 kwietnia K.Grzelak (Wykład 7) Programowanie w C++ 1 / 40
Programowanie w C++ Wykład 7 Katarzyna Grzelak 23 kwietnia 2018 K.Grzelak (Wykład 7) Programowanie w C++ 1 / 40 Standard Template Library (STL) K.Grzelak (Wykład 7) Programowanie w C++ 2 / 40 C++ Templates
Bardziej szczegółowoDariusz Brzeziński. Politechnika Poznańska, Instytut Informatyki
Dariusz Brzeziński Politechnika Poznańska, Instytut Informatyki int getmax (int a, int b) { return (a > b? a : b); float getmax (float a, float b) { return (a > b? a : b); long getmax (long a, long b)
Bardziej szczegółowoI - Microsoft Visual Studio C++
I - Microsoft Visual Studio C++ 1. Nowy projekt z Menu wybieramy File -> New -> Projekt -> Win32 Console Application w okienku Name: podajemy nazwę projektu w polu Location: wybieramy miejsce zapisu i
Bardziej szczegółowoProgramowanie Obiektowo Zorientowane w języku C++ Biblioteka STL
Programowanie Obiektowo Zorientowane w języku C++ Biblioteka STL Mirosław Głowacki 1 1 Akademia Górniczo-Hutnicza im. Stanisława Staszica w Ktrakowie Wydział Inżynierii Metali i Informatyki Stosowanej
Bardziej szczegółowoKurs programowania. Wykład 9. Wojciech Macyna. 28 kwiecień 2016
Wykład 9 28 kwiecień 2016 Java Collections Framework (w C++ Standard Template Library) Kolekcja (kontener) Obiekt grupujacy/przechowuj acy jakieś elementy (obiekty lub wartości). Przykładami kolekcji sa
Bardziej szczegółowoIMIĘ i NAZWISKO: Pytania i (przykładowe) Odpowiedzi
IMIĘ i NAZWISKO: Pytania i (przykładowe) Odpowiedzi EGZAMIN PIERWSZY (25 CZERWCA 2013) JĘZYK C++ poprawiam ocenę pozytywną z egzaminu 0 (zakreśl poniżej x) 1. Wśród poniższych wskaż poprawną formę definicji
Bardziej szczegółowoKontenery, algorytmy
Kontenery, algorytmy Zaawansowane biblioteki programistyczne Sebastian Deorowicz Politechnika Śląska 2008 10 23 Sebastian Deorowicz (PŚl) Kontenery, algorytmy 2008 10 23 1 / 84 Plan wykładu 1 Kontenery
Bardziej szczegółowoJęzyk C++ wykład VIII
Programowanie uzupełnienie notatek: dr Jerzy Białkowski 1 2 3 4 Obiektowość języka C++ ˆ Klasa (rozszerzenie struktury), obiekt instancją klasy, konstruktory i destruktory ˆ Enkapsulacja - kapsułkowanie,
Bardziej szczegółowoInformacje wstępne #include <nazwa> - derektywa procesora umożliwiająca włączenie do programu pliku o podanej nazwie. Typy danych: char, signed char
Programowanie C++ Informacje wstępne #include - derektywa procesora umożliwiająca włączenie do programu pliku o podanej nazwie. Typy danych: char, signed char = -128 do 127, unsigned char = od
Bardziej szczegółowoWykład 5 Wybrane zagadnienia programowania w C++ (c.d.)
Wykład 5 Wybrane zagadnienia programowania w C++ (c.d.) Kontenery - - wektor vector - - lista list - - kolejka queue - - stos stack Kontener asocjacyjny map 2016-01-08 Bazy danych-1 W5 1 Kontenery W programowaniu
Bardziej szczegółowoSTL: implementowanie algorytmów C++: STL. STL: implementowanie algorytmów. STL: implementowanie algorytmów. STL: implementowanie algorytmów
Algorytm przeszukiwania w głąb Przeszukiwanie grafu odwiedzenie wszystkich jego wierzchołków w kolejności jak na rysunku obok: C++: STL Implementowanie własnych algorytmów Reprezentacja grafu w programie
Bardziej szczegółowoTechniki programowania INP001002Wl rok akademicki 2018/19 semestr letni. Wykład 5. Karol Tarnowski A-1 p.
Techniki programowania INP001002Wl rok akademicki 2018/19 semestr letni Wykład 5 Karol Tarnowski karol.tarnowski@pwr.edu.pl A-1 p. 411B Plan prezentacji Przestrzenie nazw Standardowa biblioteka szablonów
Bardziej szczegółowoKurs programowania. Wykład 9. Wojciech Macyna
Wykład 9 Java Collections Framework (w C++ Standard Template Library) Kolekcja (kontener) Obiekt grupujacy/przechowuj acy jakieś elementy (obiekty lub wartości). Przykładami kolekcji sa zbiór, lista czy
Bardziej szczegółowoC++ wprowadzanie zmiennych
C++ wprowadzanie zmiennych Każda zmienna musi być zadeklarowana, należy określić jej nazwę (identyfikator) oraz typ. Opis_typu lista zmiennych Dla każdej zmiennej rezerwowany jest fragment pamięci o określonym
Bardziej szczegółowoKLASA UCZEN Uczen imię, nazwisko, średnia konstruktor konstruktor Ustaw Wyswietl Lepszy Promowany
KLASA UCZEN Napisz deklarację klasy Uczen, w której przechowujemy następujące informacje o uczniu: imię, nazwisko, średnia (pola prywatne), poza tym klasa zawiera metody: konstruktor bezparametrowy (nie
Bardziej szczegółowoPliki wykład 2. Dorota Pylak
Pliki wykład 2 Dorota Pylak Struktura programu działającego na plikach 1) Dyrektywa preprocesora #include //zapewnia dostęp do strumieni ifstream i ofstream 2) deklaracja zmiennej (strumienia)
Bardziej szczegółowoWykład II. Programowanie II - semestr II Kierunek Informatyka. dr inż. Janusz Słupik. Wydział Matematyki Stosowanej Politechniki Śląskiej
Wykład II - semestr II Kierunek Informatyka Wydział Matematyki Stosowanej Politechniki Śląskiej Gliwice, 2015 c Copyright 2015 Janusz Słupik Operacje dyskowe - zapis do pliku #include #include
Bardziej szczegółowoKLASA UCZEN Uczen imię, nazwisko, średnia konstruktor konstruktor Ustaw Wyswietl Lepszy Promowany
KLASA UCZEN Napisz deklarację klasy Uczen, w której przechowujemy następujące informacje o uczniu: imię, nazwisko, średnia (pola prywatne), poza tym klasa zawiera metody: konstruktor bezparametrowy (nie
Bardziej szczegółowoPodstawy programowania skrót z wykładów:
Podstawy programowania skrót z wykładów: // komentarz jednowierszowy. /* */ komentarz wielowierszowy. # include dyrektywa preprocesora, załączająca biblioteki (pliki nagłówkowe). using namespace
Bardziej szczegółowoSTL: kontenery. STL: kontenery. STL: kontenery. STL: kontenery. STL: kontenery. STL: kontenery
Kontenery sekwencyjne: list (lista dwukierunkowa) jest przystosowany do szybkiego wstawiania elementów w dowolne miejsce sekwencji, nie nadaje się do efektywnej realizacji operacji swobodnego dostępu,
Bardziej szczegółowoProgramowanie obiektowe i C++ dla matematyków
Programowanie obiektowe i C++ dla matematyków Bartosz Szreder szreder (at) mimuw... 22 XI 2011 Uwaga! Ponieważ już sobie powiedzieliśmy np. o wskaźnikach i referencjach, przez które nie chcemy przegrzebywać
Bardziej szczegółowoC++ - przeciążanie operatorów. C++ - przeciążanie operatorów. C++ - przeciążanie operatorów. C++ - przeciążanie operatorów
Operatory są elementami języka C++. Istnieje zasada, że z elementami języka, takimi jak np. słowa kluczowe, nie można dokonywać żadnych zmian, przeciążeń, itp. PRZECIĄŻANIE OPERATORÓW Ale dla operatorów
Bardziej szczegółowoProgramowanie Komponentowe Zarządzanie obiektami: kontenery
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
Bardziej szczegółowoBiblioteka STL - wstęp. Biblioteka STL - literatura. Biblioteka STL - przegląd. Biblioteka STL - kwestie techniczne
Biblioteka STL - literatura Biblioteka STL - wstęp STL - Standard Template Library - Standardowa Biblioteka Szablonów Nicolai M. Josuttis - "C Biblioteka standardowa. Podręcznik programisty", Helion, 2003
Bardziej szczegółowoZajęcia nr 2 Programowanie strukturalne. dr inż. Łukasz Graczykowski mgr inż. Leszek Kosarzewski Wydział Fizyki Politechniki Warszawskiej
Zajęcia nr 2 Programowanie strukturalne dr inż. Łukasz Graczykowski mgr inż. Leszek Kosarzewski Wydział Fizyki Politechniki Warszawskiej Pętla while #include using namespace std; int main ()
Bardziej szczegółowoWskaźniki. nie są konieczne, ale dają językowi siłę i elastyczność są języki w których nie używa się wskaźników typ wskaźnikowy typ pochodny:
Wskaźniki nie są konieczne, ale dają językowi siłę i elastyczność są języki w których nie używa się wskaźników typ wskaźnikowy typ pochodny: typ nw; /* definicja zmiennej nw typu typ */ typ *w_nw; /* definicja
Bardziej szczegółowoRekurencja. Przygotowała: Agnieszka Reiter
Rekurencja Przygotowała: Agnieszka Reiter Definicja Charakterystyczną cechą funkcji (procedury) rekurencyjnej jest to, że wywołuje ona samą siebie. Drugą cechą rekursji jest jej dziedzina, którą mogą być
Bardziej szczegółowoTechniki programowania INP001002Wl rok akademicki 2017/18 semestr letni. Wykład 5. Karol Tarnowski A-1 p.
Techniki programowania INP001002Wl rok akademicki 2017/18 semestr letni Wykład 5 Karol Tarnowski karol.tarnowski@pwr.edu.pl A-1 p. 411B Plan prezentacji Standardowa biblioteka szablonów (Standard Template
Bardziej szczegółowoDefinicja. Ciąg wejściowy: Funkcja uporządkowująca: Sortowanie polega na: a 1, a 2,, a n-1, a n. f(a 1 ) f(a 2 ) f(a n )
SORTOWANIE 1 SORTOWANIE Proces ustawiania zbioru elementów w określonym porządku. Stosuje się w celu ułatwienia późniejszego wyszukiwania elementów sortowanego zbioru. 2 Definicja Ciąg wejściowy: a 1,
Bardziej szczegółowoProgramowanie w C++ Wykład 11. Katarzyna Grzelak. 13 maja K.Grzelak (Wykład 11) Programowanie w C++ 1 / 30
Programowanie w C++ Wykład 11 Katarzyna Grzelak 13 maja 2019 K.Grzelak (Wykład 11) Programowanie w C++ 1 / 30 Klasy cd K.Grzelak (Wykład 11) Programowanie w C++ 2 / 30 Klasy - powtórzenie Klasy typy definiowane
Bardziej szczegółowoBIBLIOTEKA STANDARDOWA C++
Programowanie Obiektowe (język C++) Wykład 11. BIBLIOTEKA STANDARDOWA C++ Tomasz Marks - Wydział MiNI PW -1- Tomasz Marks - Wydział MiNI PW -2- Biblioteka standardowa C++ - Wprowadzenie Główne elementy
Bardziej szczegółowoPROE wykład 3 klasa string, przeciążanie funkcji, operatory. dr inż. Jacek Naruniec
PROE wykład 3 klasa string, przeciążanie funkcji, operatory dr inż. Jacek Naruniec Przypomnienie z ostatnich wykładów Konstruktory/destruktory i kolejność ich wywołania w złożonej klasie. Referencja Obiekty
Bardziej szczegółowoAlgorytmy i Struktury Danych.
Algorytmy i Struktury Danych. Standard Template Library. Część 1. Bożena Woźna-Szcześniak bwozna@gmail.com Jan Długosz University, Poland Wykład 6 Bożena Woźna-Szcześniak (AJD) Algorytmy i Struktury Danych.
Bardziej szczegółowoAutomatyczne tworzenie operatora = Integer2& operator=(const Integer& prawy) { zdefiniuje. Integer::operator=(ri);
Przeciążanie operatorów [] Przykład: klasa reprezentująca typ tablicowy. Obiekt ma reprezentować tablicę, do której można się odwoływać intuicyjnie, np. Tab[i] Ma być też dostępnych kilka innych metod
Bardziej szczegółowoProgramowanie w C++ Wykład 12. Katarzyna Grzelak. 28 maja K.Grzelak (Wykład 12) Programowanie w C++ 1 / 27
Programowanie w C++ Wykład 12 Katarzyna Grzelak 28 maja 2018 K.Grzelak (Wykład 12) Programowanie w C++ 1 / 27 Klasy cd K.Grzelak (Wykład 12) Programowanie w C++ 2 / 27 Klasy - powtórzenie Klasy typy definiowane
Bardziej szczegółowoParadygmaty programowania
Paradygmaty programowania Programowanie generyczne w C++ Dr inż. Andrzej Grosser Cz estochowa, 2014 2 Spis treści 1. Zadanie 4 5 1.1. Wprowadzenie.................................. 5 1.2. Wskazówki do
Bardziej szczegółowoRozwiązanie. #include <cstdlib> #include <iostream> using namespace std;
Programowanie C++ Zadanie 1 Napisz program do obliczenia sumy i iloczynu ciągu liczb zakooczonego liczbą zero. Zakładamy, że ciąg zawiera co najmniej jedną liczbę (założenie to jest konieczne przy obliczeniu
Bardziej szczegółowoLab 9 Podstawy Programowania
Lab 9 Podstawy Programowania (Kaja.Gutowska@cs.put.poznan.pl) Wszystkie kody/fragmenty kodów dostępne w osobnym pliku.txt. Materiały pomocnicze: Wskaźnik to specjalny rodzaj zmiennej, w której zapisany
Bardziej szczegółowoProgramowanie Obiektowo Zorientowane w języku c++ Przestrzenie nazw
Programowanie Obiektowo Zorientowane w języku c++ Przestrzenie nazw Mirosław Głowacki 1 1 Akademia Górniczo-Hutnicza im. Stanisława Staszica w Ktrakowie Wydział Inżynierii Metali i Informatyki Stosowanej
Bardziej szczegółowoJak Windows zarządza pamięcią?
Jak Windows zarządza pamięcią? System Windows definiuje dwa typy pamięci, często mylone przez użytkowników. Pamięć fizyczna (pamięc RAM zainstalowana w komputerze) Pamięć widziana przez daną aplikację
Bardziej szczegółowoZaawansowane programowanie w C++ (PCP)
Wykład 8 - biblioteka standardowa. Kolekcje i iteratory 27 kwietnia 2007 Powtórzenie - sprytne wskaźniki Zalety: upraszczają zarządzanie obiektami na stercie Wady: narzuty Sprytne wskaźniki dostępne w
Bardziej szczegółowoOperatory na rzecz typu TString
Operatory na rzecz typu TString Dopiszmy w definicji klasy operator[], dzięki któremu potraktujemy obiekt jak tablicę class TString { public: char& operator[]( size_t n ); const char& operator[]( size_t
Bardziej szczegółowoParadygmaty programowania. Paradygmaty programowania
Paradygmaty programowania Paradygmaty programowania Dr inż. Andrzej Grosser Cz estochowa, 2013 2 Spis treści 1. Zadanie 2 5 1.1. Wprowadzenie.................................. 5 1.2. Wskazówki do zadania..............................
Bardziej szczegółowoPARADYGMATY PROGRAMOWANIA Wykład 3
PARADYGMATY PROGRAMOWANIA Wykład 3 Definiowanie operatorów i ich przeciążanie Przykłady zastosowania operatorów: a) operator podstawienia ( = ) obiektów o złożonej strukturze, b) operatory działania na
Bardziej szczegółowoW przypadku STL w specyfikacji nazwy pliku nagłówkowego brak rozszerzenia tj. <string> <string.h> zamiast
Wykład 12 - Biblioteka stadardowa.sxw 1 Przegląd biblioteki standardowej C++; W porównaniu z pierwszymi implementacjami i specyfikacjami C++ biblioteka standardowa języka C++ bardzo się rozrosła, a w latach
Bardziej szczegółowoPodstawowe algorytmy i ich implementacje w C. Wykład 9
Wstęp do programowania 1 Podstawowe algorytmy i ich implementacje w C Bożena Woźna-Szcześniak bwozna@gmail.com Jan Długosz University, Poland Wykład 9 Element minimalny i maksymalny zbioru Element minimalny
Bardziej szczegółowoLista, Stos, Kolejka, Tablica Asocjacyjna
Lista, Stos, Kolejka, Tablica Asocjacyjna Listy Lista zbiór elementów tego samego typu może dynamicznie zmieniać rozmiar, pozwala na dostęp do poszczególnych elementów Typowo dwie implementacje: tablicowa,
Bardziej szczegółowoPojemniki Pojemnik to obiekt, którego zadaniem jest przechowywanie innych obiektów.
1 Wstęp Biblioteka standardowa C++ Wejście/wyjście (iostream) Napisy (string) Napisy jako strumienie (sstream) STL Standard Template Library Pojemniki (kolekcje) Iteratory (wyliczanie elementów) Algorytmy
Bardziej szczegółowoWstęp do informatyki- wykład 12 Funkcje (przekazywanie parametrów przez wartość i zmienną)
1 Wstęp do informatyki- wykład 12 Funkcje (przekazywanie parametrów przez wartość i zmienną) Treści prezentowane w wykładzie zostały oparte o: S. Prata, Język C++. Szkoła programowania. Wydanie VI, Helion,
Bardziej szczegółowoJęzyki i techniki programowania Ćwiczenia 2
Języki i techniki programowania Ćwiczenia 2 Autor: Marcin Orchel Spis treści: Język C++... 5 Przekazywanie parametrów do funkcji... 5 Przekazywanie parametrów w Javie.... 5 Przekazywanie parametrów w c++...
Bardziej szczegółowoZajęcia nr 5 Algorytmy i wskaźniki. dr inż. Łukasz Graczykowski mgr inż. Leszek Kosarzewski Wydział Fizyki Politechniki Warszawskiej
Zajęcia nr 5 Algorytmy i wskaźniki dr inż. Łukasz Graczykowski mgr inż. Leszek Kosarzewski Wydział Fizyki Politechniki Warszawskiej Plan Zapis i odczyt z plików tekstowych O tablicach ciąg dalszy Referencje
Bardziej szczegółowo// Liczy srednie w wierszach i kolumnach tablicy "dwuwymiarowej" // Elementy tablicy są generowane losowo #include <stdio.h> #include <stdlib.
Wykład 10 Przykłady różnych funkcji (cd) - przetwarzanie tablicy tablic (tablicy "dwuwymiarowej") - sortowanie przez "selekcję" Dynamiczna alokacja pamięci 1 // Liczy srednie w wierszach i kolumnach tablicy
Bardziej szczegółowoProgramowanie w języku C++
Programowanie w języku C++ Część siódma Autor Roman Simiński Kontakt roman.siminski@us.edu.pl www.us.edu.pl/~siminski Niniejsze opracowanie zawiera skrót treści wykładu, lektura tych materiałów nie zastąpi
Bardziej szczegółowoJęzyk ludzki kod maszynowy
Język ludzki kod maszynowy poziom wysoki Język ludzki (mowa) Język programowania wysokiego poziomu Jeśli liczba punktów jest większa niż 50, test zostaje zaliczony; w przeciwnym razie testu nie zalicza
Bardziej szczegółowoAby 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.
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. Pliki z rozwiązaniami projektu (wszystkie polecenia
Bardziej szczegółowoTablice. Monika Wrzosek (IM UG) Podstawy Programowania 96 / 119
Tablice Tablica to struktura danych, która może przechowywać wiele wartości tego samego typu. Na przykład tablica może zawierać: 10 wartości typu int opisujących liczbę studentów przyjętych na kierunek
Bardziej szczegółowoSzablony funkcji i szablony klas
Bogdan Kreczmer bogdan.kreczmer@pwr.wroc.pl Zakład Podstaw Cybernetyki i Robotyki Instytut Informatyki, Automatyki i Robotyki Politechnika Wrocławska Kurs: Copyright c 2011 Bogdan Kreczmer Niniejszy dokument
Bardziej szczegółowoPliki wykład 2. Dorota Pylak
Pliki wykład 2 Dorota Pylak Struktura programu działającego na plikach 1) Dyrektywa preprocesora #include //zapewnia dostęp do strumieni ifstream i ofstream 2) deklaracja zmiennej (strumienia)
Bardziej szczegółowoWydajność użycia funktorów z biblioteką STL języka C++
Wydajność użycia funktorów z biblioteką STL języka C++ Irek Szcześniak, Maciek Sobczak 1 października 2005 roku Streszczenie Artykuł dotyczy wydajności użycia funktorów z biblioteką STL (Standard Template
Bardziej szczegółowoSzablony klas, zastosowanie szablonów w programach
Szablony klas, zastosowanie szablonów w programach 1. Szablony klas i funkcji 2. Szablon klasy obsługującej uniwersalną tablicę wskaźników 3. Zastosowanie metody zwracającej przez return referencję do
Bardziej szczegółowoWskaźnik może wskazywać na jakąś zmienną, strukturę, tablicę a nawet funkcję. Oto podstawowe operatory niezbędne do operowania wskaźnikami:
Wskaźniki są nieodłącznym elementem języka C. W języku C++ także są przydatne i korzystanie z nich ułatwia pracę, jednak w odróżnieniu do C wiele rzeczy da się osiągnąć bez ich użycia. Poprawne operowanie
Bardziej szczegółowoPodstawy Programowania
Podstawy Programowania dr Elżbieta Gawrońska gawronska@icis.pcz.pl Instytut Informatyki Teoretycznej i Stosowanej dr Elżbieta Gawrońska (ICIS) Podstawy Programowania 05 1 / 15 Plan wykładu 1 Biblioteka
Bardziej szczegółowoSTL: kontenery C++: STL: kontenery. STL: kontenery. STL: kontenery. STL: kontenery. Fabryka obiektów. Fabryka obiektów
Fabryka obiektów C++: Fabryka obiektów Klasa, której obiekty pośrednicza przy tworzeniu innych obiektów. Pomagają tworzyć obiekty, jeżeli informacja o typie odnosi się do konkretnego typu, znanego w momencie
Bardziej szczegółowoZaawansowane programowanie w C++ (PCP)
Wykład 9 - powtórzenie. 11 maja 2007 Powtórzenie materiału obiekty automatyczne, statyczne, tymczasowe, dynamiczne dziedziczenie, agregacja polimorfizm, funkcje wirtualne wzorce projektowe (strukturalne,
Bardziej szczegółowoSzablon klasy std::vector
Szablon klasy std::vector Bogdan Kreczmer ZPCiR IIAiR PWr pokój 307 budynek C3 bogdan.kreczmer@pwr.wroc.pl Copyright c 2006 2010 Bogdan Kreczmer Niniejszy dokument zawiera materiały do wykładu na temat
Bardziej szczegółowo2. Klasy cz. 2 - Konstruktor kopiujący. Pola tworzone statycznie i dynamicznie - Funkcje zaprzyjaźnione - Składowe statyczne
Tematyka wykładów 1. Wprowadzenie. Klasy cz. 1 - Język C++. Programowanie obiektowe - Klasy i obiekty - Budowa i deklaracja klasy. Prawa dostępu - Pola i funkcje składowe - Konstruktor i destruktor - Tworzenie
Bardziej szczegółowowykł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
i obiekty Programowanie i obiekty uzupełnienie notatek: dr Jerzy Białkowski i obiekty 1 2 3 4 i obiekty Obiektowość języka C++ Na tym wykładzie poznamy: ˆ Klasa (w języku C++ rozszerzenie struktury, typ
Bardziej szczegółowoJęzyki Programowania. Prowadząca: dr inż. Hanna Zbroszczyk. tel: Konsultacje: piątek:
Języki Programowania Prowadząca: dr inż. Hanna Zbroszczyk e-mail: gos@if.pw.edu.pl tel: +48 22 234 58 51 Konsultacje: piątek: 12.00 13.30 www: http://www.if.pw.edu.pl/~gos/students/jp Politechnika Warszawska
Bardziej szczegółowoĆwiczenie 7 z Podstaw programowania. Język C++, programy pisane w nieobiektowym stylu programowania. Zofia Kruczkiewicz
Ćwiczenie 7 z Podstaw programowania. Język C++, programy pisane w nieobiektowym stylu programowania Zofia Kruczkiewicz Zakres Funkcje przetwarzające teksty (biblioteka ) - tworzenie własnych
Bardziej szczegółowoZadania z podstaw programowania obiektowego
Zadania z podstaw programowania obiektowego 1. Napisać klasę Lista, której zadaniem będzie przechowywanie listy liczb całkowitych. Klasa ta ma mieć następujące pola prywatne: int* liczby; tablica, w której
Bardziej szczegółowodr inż. Jarosław Forenc
Informatyka 2 Politechnika Białostocka - Wydział Elektryczny Elektrotechnika, semestr III, studia niestacjonarne I stopnia Rok akademicki 2011/2012 Pracownia nr 9 (20.01.2012) dr inż. Jarosław Forenc Rok
Bardziej szczegółowoutworz tworzącą w pamięci dynamicznej tablicę dwuwymiarową liczb rzeczywistych, a następnie zerującą jej wszystkie elementy,
Lista 3 Zestaw I Zadanie 1. Zaprojektować i zaimplementować funkcje: utworz tworzącą w pamięci dynamicznej tablicę dwuwymiarową liczb rzeczywistych, a następnie zerującą jej wszystkie elementy, zapisz
Bardziej szczegółowojest mocny, skoro da się w nim wyrazić nowe pojęcia; łatwiej przenieść go na nową platformę jest mniejszy.
Wejście-wyjście Nie jest elementem języka C++ Niezbyt istotne dla użytkownika, ważne dla języka: jest mocny, skoro da się w nim wyrazić nowe pojęcia; łatwiej przenieść go na nową platformę jest mniejszy.
Bardziej szczegółowoSkładnia C++ Programowanie Obiektowe Mateusz Cicheński
Składnia C++ Programowanie Obiektowe Mateusz Cicheński Klasy i modyfikatory dostępu Przesłanianie metod Polimorfizm Wskaźniki Metody wirtualne Metody abstrakcyjne i interfejsy Konstruktory i destruktory
Bardziej szczegółowoKontenery i iteratory. Wykorzystanie kontenerów w praktyce.
Instrukcja laboratoryjna nr 2 Programowanie w języku C 2 (C++ poziom zaawansowany) Kontenery i iteratory. Wykorzystanie kontenerów w praktyce. dr inż. Jacek Wilk-Jakubowski mgr inż. Maciej Lasota dr inż.
Bardziej szczegółowoAutomatyczne tworzenie operatora = Integer2& operator=(const Integer& prawy) {
Przeciążanie a dziedziczenie class Integer2: public Integer Operatory, z wyjątkiem operatora przypisania są automatycznie dziedziczone w klasach pochodnych. Integer2(int i): Integer(i) Automatyczne tworzenie
Bardziej szczegółowoWstęp do programowania
Wstęp do programowania Algorytmy na tablicach Paweł Daniluk Wydział Fizyki Jesień 2013 P. Daniluk (Wydział Fizyki) WP w. III Jesień 2013 1 / 23 Dwadzieścia pytań Zasady 1 Osoba 1 wymyśla hasło z ustalonej
Bardziej szczegółowoInformatyka I. Typy danych. Operacje arytmetyczne. Konwersje typów. Zmienne. Wczytywanie danych z klawiatury. dr hab. inż. Andrzej Czerepicki
Informatyka I Typy danych. Operacje arytmetyczne. Konwersje typów. Zmienne. Wczytywanie danych z klawiatury. dr hab. inż. Andrzej Czerepicki Politechnika Warszawska Wydział Transportu 2019 1 Plan wykładu
Bardziej szczegółowoTechnologie programowania Wykład 4. Szablony funkcji Notes. Szablony funkcji Notes. Szablony funkcji Notes. Notes. Przemek Błaśkiewicz.
Technologie programowania Wykład 4 Przemek Błaśkiewicz 9 maja 2017 1 / 54 Szablony funkcji Często w programach zachodzi potrzeba użycia funkcji, które co do mechanizmu działaja tak samo, ale różnia się
Bardziej szczegółowoProgramowanie obiektowe - Przykładowe zadania egzaminacyjne (2005/2006)
Programowanie obiektowe - Przykładowe zadania egzaminacyjne (2005/2006) Część 1. Teoria Wyjaśnij pojęcia, podaj przykład: klasa obiekt konstruktor destruktor kapsułkowanie (hermetyzacja) wskaźnik this
Bardziej szczegółowoSTL Standard Template Library
Literatura Przykłady: STL Standard Template Library Nicolai M. Josuttis: C++ Standard Library: A tutorial and Reference, 1st, Pearson 1999, (Polska wersja: Nicolai M. Josuttis: C++ Biblioteka standardowa
Bardziej szczegółowoAlgorytmika i programowanie. Wykład 2 inż. Barbara Fryc Wyższa Szkoła Informatyki i Zarządzania w Rzeszowie
Algorytmika i programowanie Wykład 2 inż. Barbara Fryc Wyższa Szkoła Informatyki i Zarządzania w Rzeszowie Tablice Tablica jest zbiorem elementów tego samego typu. Każdy element jest identyfikowany (numer
Bardziej szczegółowoProgramowanie w C++ Wykład 5. Katarzyna Grzelak. 16 kwietnia K.Grzelak (Wykład 1) Programowanie w C++ 1 / 27
Programowanie w C++ Wykład 5 Katarzyna Grzelak 16 kwietnia 2018 K.Grzelak (Wykład 1) Programowanie w C++ 1 / 27 Pojęcia z poprzednich wykładów Tablica to ciag obiektów tego samego typu, zajmujacy ciagły
Bardziej szczegółowodo instrukcja while (wyrażenie);
Instrukcje pętli -ćwiczenia Instrukcja while Pętla while (póki) powoduje powtarzanie zawartej w niej sekwencji instrukcji tak długo, jak długo zaczynające pętlę wyrażenie pozostaje prawdziwe. while ( wyrażenie
Bardziej szczegółowo