Algorytmy, iteratory, kolekcje niestandardowe

Wielkość: px
Rozpocząć pokaz od strony:

Download "Algorytmy, iteratory, kolekcje niestandardowe"

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

Część 4 życie programu

Część 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ółowo

Zaawansowane programowanie w języku C++ Biblioteka standardowa

Zaawansowane 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ółowo

Algorytmy w C++ dla opornych!

Algorytmy 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ółowo

Kontenery, algorytmy

Kontenery, 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ółowo

STL Standardt Template Library (wprowadzenie)

STL 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ółowo

I - Microsoft Visual Studio C++

I - 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ółowo

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

Kurs 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ółowo

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

Wykł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ółowo

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

Wykł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ółowo

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

Biblioteka 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ółowo

Rekurencja. Przygotowała: Agnieszka Reiter

Rekurencja. 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ółowo

Programowanie Komponentowe Zarządzanie obiektami: kontenery

Programowanie 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ółowo

Algorytmy i Struktury Danych.

Algorytmy 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ółowo

PROE 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 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ółowo

Jak Windows zarządza pamięcią?

Jak 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ółowo

Zaawansowane programowanie w C++ (PCP)

Zaawansowane 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ółowo

PARADYGMATY PROGRAMOWANIA Wykład 3

PARADYGMATY 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ółowo

Szablony funkcji i szablony klas

Szablony 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ółowo

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

Pojemniki 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ółowo

Programowanie w języku C++

Programowanie 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ółowo

Język ludzki kod maszynowy

Ję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ółowo

STL Standard Template Library

STL 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ółowo

Zadania z podstaw programowania obiektowego

Zadania 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ółowo

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

2. 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ółowo

Podstawy Programowania

Podstawy 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ółowo

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

Język C++ część 9 szablony klas. Jarosław Gramacki Instytut Informatyki i Elektroniki. szablony funkcji Język C++ część 9 szablony klas Jarosław Gramacki Instytut Informatyki i Elektroniki szablony funkcji były omawiane na wcześniejszym wykładzie nazewnictwo: szablon funkcji wzorzec funkcji 2 szablony

Bardziej szczegółowo

do instrukcja while (wyrażenie);

do 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

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

Wykład I. Programowanie II - semestr II Kierunek Informatyka. dr inż. Janusz Słupik. Wydział Matematyki Stosowanej Politechniki Śląskiej Wykład I - semestr II Kierunek Informatyka Wydział Matematyki Stosowanej Politechniki Śląskiej Gliwice, 2015 c Copyright 2015 Janusz Słupik Zaliczenie przedmiotu Do zaliczenia przedmiotu niezbędne jest

Bardziej szczegółowo

Kurs programowania. Wykład 2. Wojciech Macyna. 17 marca 2016

Kurs programowania. Wykład 2. Wojciech Macyna. 17 marca 2016 Wykład 2 17 marca 2016 Dziedziczenie Klasy bazowe i potomne Dziedziczenie jest łatwym sposobem rozwijania oprogramowania. Majac klasę bazowa możemy ja uszczegółowić (dodać nowe pola i metody) nie przepisujac

Bardziej szczegółowo

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

Podstawy informatyki. Informatyka stosowana - studia niestacjonarne. Grzegorz Smyk. Wydział Inżynierii Metali i Informatyki Przemysłowej Podstawy informatyki Informatyka stosowana - studia niestacjonarne Grzegorz Smyk Wydział Inżynierii Metali i Informatyki Przemysłowej Akademia Górniczo Hutnicza im. Stanisława Staszica w Krakowie, rok

Bardziej szczegółowo

Programowanie w języku C++

Programowanie w języku C++ INE 2022 JĘZYKI PROGRAMOWANIA 1 INE 0050 WSTĘP DO PROGRAMOWANIA Programowanie w języku C++ ( wykł. dr Marek Piasecki ) Literatura: do wykładu dowolny podręcznik do języka C++ na laboratoriach Borland C++

Bardziej szczegółowo

Dr inż. Grażyna KRUPIŃSKA. D-10 pokój 227 WYKŁAD 7 WSTĘP DO INFORMATYKI

Dr inż. Grażyna KRUPIŃSKA. D-10 pokój 227 WYKŁAD 7 WSTĘP DO INFORMATYKI Dr inż. Grażyna KRUPIŃSKA Grazyna.Krupinska@fis.agh.edu.pl D-10 pokój 227 WYKŁAD 7 WSTĘP DO INFORMATYKI Wyrażenia 2 Wyrażenia w języku C są bardziej elastyczne niż wyrażenia w jakimkolwiek innym języku

Bardziej szczegółowo

Wzorce funkcji (szablony)

Wzorce funkcji (szablony) Wzorce funkcji (szablony) Wzorce funkcji (ang. function template) dają możliwość wielokrotnego wykorzystywania tego samego kodu funkcji dla różnych typów danych. Załóżmy, że chcemy zdefiniować funkcję

Bardziej szczegółowo

Język C++ Różnice między C a C++

Język C++ Różnice między C a C++ Język C++ Różnice między C a C++ Plan wykładu C a C++ Różnice ogólne Typy Deklaracje zmiennych C++ jako rozszerzenie C Domyślne argumenty funkcji Przeciążanie funkcji Referencje Dynamiczny przydział pamięci

Bardziej szczegółowo

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

Dla każdej operacji łącznie tworzenia danych i zapisu ich do pliku przeprowadzić pomiar czasu wykonania polecenia. Wyniki przedstawić w tabelce. Przygotować program tworzący tablicę dwuwymiarową zawierającą zestawy 10 2, 10 4, 10 6 liczb losowych zmiennoprzecinkowych. Korzystając z funkcji bibliotecznych uporządkować zawartość każdego (a) wiersza

Bardziej szczegółowo

Projektowanie klas c.d. Projektowanie klas przykład

Projektowanie klas c.d. Projektowanie klas przykład Projektowanie klas c.d. ogólne wskazówki dotyczące projektowania klas: o wyodrębnienie klasy odpowiedź na potrzeby życia (obsługa rozwiązania konkretnego problemu) o zwykle nie uda się utworzyć idealnej

Bardziej szczegółowo

Programowanie w językach

Programowanie w językach Programowanie w językach wysokiego poziomu Obsługa plików za pomocą strumieni Elektronika i Telekomunikacja, semestr III rok akademicki 2013/2014 dr inż. Paweł Myszkowski Plan zajęć a) otwieranie i zamykanie

Bardziej szczegółowo

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

Strona główna. Strona tytułowa. Programowanie. Spis treści. Sobera Jolanta 16.09.2006. Strona 1 z 26. Powrót. Full Screen. Zamknij. Programowanie Sobera Jolanta 16.09.2006 Strona 1 z 26 1 Wprowadzenie do programowania 4 2 Pierwsza aplikacja 5 3 Typy danych 6 4 Operatory 9 Strona 2 z 26 5 Instrukcje sterujące 12 6 Podprogramy 15 7 Tablice

Bardziej szczegółowo

Podstawy Programowania Obiektowego

Podstawy Programowania Obiektowego Podstawy Programowania Obiektowego Pojęcie struktury i klasy. Konstruktor i destruktor. Spotkanie 08 Dr inż. Dariusz JĘDRZEJCZYK Tematyka wykładu Spotkanie 08 Klasy: definicja a deklaracja klasy dane składowe

Bardziej szczegółowo

Zadania do wykonania. Rozwiązując poniższe zadania użyj pętlę for.

Zadania do wykonania. Rozwiązując poniższe zadania użyj pętlę for. Zadania do wykonania Rozwiązując poniższe zadania użyj pętlę for. 1. apisz program, który przesuwa w prawo o dwie pozycje zawartość tablicy 10-cio elementowej liczb całkowitych tzn. element t[i] dla i=2,..,9

Bardziej szczegółowo

STL Standard Template Library

STL Standard Template Library ź ź STL Standard Template Library STL jest bibliotek kontenerów, algorytmów, iteratorów i wielu innych powszechnie u ywanych udogodnie programistycznych. STL jest wbudowany w standard j zyka C++, umo liwia

Bardziej szczegółowo

10.1 Szablony... 1 10.2 Szablony funkcji... 2 10.3 Szablony klas... 5 10.4 Szablony jako wstęp do biblioteki STL... 10

10.1 Szablony... 1 10.2 Szablony funkcji... 2 10.3 Szablony klas... 5 10.4 Szablony jako wstęp do biblioteki STL... 10 .1 Szablony... 1.2 Szablony funkcji... 2.3 Szablony klas....4 Szablony jako wstęp do biblioteki STL....1 Szablony Szablony definiują sparametryzowane rodziny klas, funkcji. Szablony deklarujemy i definiujemy

Bardziej szczegółowo

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

Kontenery. Wykład 12. Programowanie (język C++) Rodzaje kontenerów. Przegląd kontenerów Programowanie (język C) Kontenery Wykład 12. Tomasz Marks - Wydział MiNI PW -1- Tomasz Marks - Wydział MiNI PW -2- Rodzaje kontenerów Kontenery sekwencyjne kolekcje uporządkowane, w których kaŝdy element

Bardziej szczegółowo

Podstawy języka C++ Maciej Trzebiński. Praktyki studenckie na LHC IFJ PAN. Instytut Fizyki Jądrowej Polskiej Akademii Nauk. M. Trzebiński C++ 1/16

Podstawy języka C++ Maciej Trzebiński. Praktyki studenckie na LHC IFJ PAN. Instytut Fizyki Jądrowej Polskiej Akademii Nauk. M. Trzebiński C++ 1/16 M. Trzebiński C++ 1/16 Podstawy języka C++ Maciej Trzebiński Instytut Fizyki Jądrowej Polskiej Akademii Nauk Praktyki studenckie na LHC IFJ PAN 6lipca2015 Uruchomienie maszyny w CC1 M. Trzebiński C++ 2/16

Bardziej szczegółowo

Podstawy programowania w języku C++

Podstawy programowania w języku C++ Podstawy programowania w języku C++ Część dziewiąta Tablice a zmienne wskaźnikowe Wersja skrócona, tylko C++ Autor Roman Simiński Kontakt roman.siminski@us.edu.pl www.us.edu.pl/~siminski Niniejsze opracowanie

Bardziej szczegółowo

Zajęcia 6 wskaźniki i tablice dynamiczne

Zajęcia 6 wskaźniki i tablice dynamiczne Zajęcia 6 wskaźniki i tablice dynamiczne 1. Napisz funkcję void zamien(int *a, int *b), która otrzymuje wskaźniki dwóch zmiennych typu całkowitego, a następnie dokonuje zamiany wartości wskazywanych zmiennych.

Bardziej szczegółowo

1 Wskaźniki i zmienne dynamiczne, instrukcja przed zajęciami

1 Wskaźniki i zmienne dynamiczne, instrukcja przed zajęciami 1 Wskaźniki i zmienne dynamiczne, instrukcja przed zajęciami Celem tych zajęć jest zrozumienie i oswojenie z technikami programowania przy pomocy wskaźników w języku C++. Proszę przeczytać rozdział 8.

Bardziej szczegółowo

Programowanie obiektowe w C++ Wykład 11

Programowanie obiektowe w C++ Wykład 11 Programowanie obiektowe w C++ Wykład 11 dr Lidia Stępień Akademia im. Jana Długosza w Częstochowie L. Stępień (AJD) Programowanie obiektowe w C++ 1 / 34 STL - rys historyczny utworzona została w 1994 r.

Bardziej szczegółowo

Dynamiczny przydział pamięci w języku C. Dynamiczne struktury danych. dr inż. Jarosław Forenc. Metoda 1 (wektor N M-elementowy)

Dynamiczny przydział pamięci w języku C. Dynamiczne struktury danych. dr inż. Jarosław Forenc. Metoda 1 (wektor N M-elementowy) Rok akademicki 2012/2013, Wykład nr 2 2/25 Plan wykładu nr 2 Informatyka 2 Politechnika Białostocka - Wydział Elektryczny Elektrotechnika, semestr III, studia niestacjonarne I stopnia Rok akademicki 2012/2013

Bardziej szczegółowo

Zaawansowany kurs języka Python

Zaawansowany kurs języka Python Wykład 4. 23 października 2015 Plan wykładu 1 2 Pliki tekstowe Trwałość obiektów CSV Strumienie Plan wykładu 1 2 Pliki tekstowe Trwałość obiektów CSV Strumienie Protokół iteracyjny Producent Umiem dostarczać

Bardziej szczegółowo

Zwracanie obiektu. Funkcja może zwracać obiekty: #include"stdafx.h #include using namespace std; class samp { inti; public:

Zwracanie obiektu. Funkcja może zwracać obiekty: #includestdafx.h #include <iostream> using namespace std; class samp { inti; public: Zwracanie obiektu Funkcja może zwracać obiekty: #include"stdafx.h #include using namespace std; class samp ; inti; samp(char *title); voidset_i(intii) i = ii; intget_i() return i; ~samp(); samp::samp(char

Bardziej szczegółowo

Algorytmy i język C++

Algorytmy i język C++ Wykład 6 Wskaźniki Wskaźnik nie przechowuje wartości zmiennej ale, podobnie jak tablica, wskazuje miejsce w pamięci, w którym znajduje się zmienna danego typu. W poniższym przykładzie symbol * pomiędzy

Bardziej szczegółowo

Temat: Dynamiczne przydzielanie i zwalnianie pamięci. Struktura listy operacje wstawiania, wyszukiwania oraz usuwania danych.

Temat: Dynamiczne przydzielanie i zwalnianie pamięci. Struktura listy operacje wstawiania, wyszukiwania oraz usuwania danych. Temat: Dynamiczne przydzielanie i zwalnianie pamięci. Struktura listy operacje wstawiania, wyszukiwania oraz usuwania danych. 1. Rodzaje pamięci używanej w programach Pamięć komputera, dostępna dla programu,

Bardziej szczegółowo

Drzewa wyszukiwań binarnych (BST)

Drzewa wyszukiwań binarnych (BST) Drzewa wyszukiwań binarnych (BST) Krzysztof Grządziel 12 czerwca 2007 roku 1 Drzewa Binarne Drzewa wyszukiwań binarnych, w skrócie BST (od ang. binary search trees), to szczególny przypadek drzew binarnych.

Bardziej szczegółowo

Wprowadzenie w dziedziczenie. Klasa D dziedziczy klasę B: Klasa B klasa bazowa (base class), klasa D klasa pochodna (derived class).

Wprowadzenie w dziedziczenie. Klasa D dziedziczy klasę B: Klasa B klasa bazowa (base class), klasa D klasa pochodna (derived class). Wprowadzenie w dziedziczenie Klasa D dziedziczy klasę B: B klasa bazowa D klasa pochodna Klasa B klasa bazowa (base class), klasa D klasa pochodna (derived class). Najpierw jest tworzona klasa bazowa,

Bardziej szczegółowo

Wykład 9 2014-06-20 09:37 PP2_W9

Wykład 9 2014-06-20 09:37 PP2_W9 Wykład 9 Przykłady programów z wykorzystaniem klas - przykład funkcji operatorowych - obiektowa implementacja listy jednokierunkowej kopiowanie obiektów - klasa "latający napis" Pozycjonowanie w plikach

Bardziej szczegółowo

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

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

Bardziej szczegółowo

Java Collections Framework

Java Collections Framework Java Collections Framework Co to jest Java Collections Framework JCF Zunifikowana architektura do reprezentacji i manipulacji kolekcjami danych. Składa się z: Interfejsów Definuje abstrakcyjne typy możliwych

Bardziej szczegółowo

1 P roste e t ypy p d a d n a ych c - c ąg ą g d a d l a szy 2 T y T py p z ł z o ł żo ż ne e d a d n a ych c : T BLICE

1 P roste e t ypy p d a d n a ych c - c ąg ą g d a d l a szy 2 T y T py p z ł z o ł żo ż ne e d a d n a ych c : T BLICE 1. Proste typy danych- ciąg dalszy 2. Typy złożone danych : TABLICE Wykład 3 ZMIENNE PROSTE: TYPY WBUDOWANE Typy zmiennoprzecinkowe: float double long double Różne rozmiary bajtowe. W konsekwencji różne

Bardziej szczegółowo

PROGRAMOWANIE GENERYCZNE W JĘZYKU C++

PROGRAMOWANIE GENERYCZNE W JĘZYKU C++ PROGRAMOWANIE GENERYCZNE W JĘZYKU C++ Krzysztof Rogala Instytu Automatyki i Informatyki Stosowanej Wydział Elektroniki i Technik Informacyjnych Politechniki Warszawskiej CZYM JEST PROGRAMOWANIE GENERYCZNE?

Bardziej szczegółowo

Kompletna dokumentacja kontenera C++ vector w - http://www.cplusplus.com/reference/stl/vector/

Kompletna dokumentacja kontenera C++ vector w - http://www.cplusplus.com/reference/stl/vector/ STL, czyli o co tyle hałasu W świecie programowania C++, hasło STL pojawia się nieustannie i zawsze jest o nim głośno... często początkujące osoby, które nie znają STL-a pytają się co to jest i czemu go

Bardziej szczegółowo

Złożoność obliczeniowa zadania, zestaw 2

Złożoność obliczeniowa zadania, zestaw 2 Złożoność obliczeniowa zadania, zestaw 2 Określanie złożoności obliczeniowej algorytmów, obliczanie pesymistycznej i oczekiwanej złożoności obliczeniowej 1. Dana jest tablica jednowymiarowa A o rozmiarze

Bardziej szczegółowo

Algorytmy i struktury danych

Algorytmy i struktury danych Algorytmy i struktury danych Proste algorytmy sortowania Witold Marańda maranda@dmcs.p.lodz.pl 1 Pojęcie sortowania Sortowaniem nazywa się proces ustawiania zbioru obiektów w określonym porządku Sortowanie

Bardziej szczegółowo

Języki i metodyka programowania. Wprowadzenie do języka C

Języki i metodyka programowania. Wprowadzenie do języka C Literatura: Brian W. Kernighan, Dennis M. Ritchie Język Ansi C, Wydawnictwa Naukowo - Techniczne, 2007 http://cm.bell-labs.com/cm/cs/cbook/index.html Scott E. Gimpel, Clovis L. Tondo Język Ansi C. Ćwiczenia

Bardziej szczegółowo

Laboratorium 3: Tablice, tablice znaków i funkcje operujące na ciągach znaków. dr inż. Arkadiusz Chrobot dr inż. Grzegorz Łukawski

Laboratorium 3: Tablice, tablice znaków i funkcje operujące na ciągach znaków. dr inż. Arkadiusz Chrobot dr inż. Grzegorz Łukawski Laboratorium 3: Tablice, tablice znaków i funkcje operujące na ciągach znaków dr inż. Arkadiusz Chrobot dr inż. Grzegorz Łukawski 7 kwietnia 2014 1. Wprowadzenie Pierwsza część instrukcji zawiera informacje

Bardziej szczegółowo

Wiadomości wstępne Środowisko programistyczne Najważniejsze różnice C/C++ vs Java

Wiadomości wstępne Środowisko programistyczne Najważniejsze różnice C/C++ vs Java Wiadomości wstępne Środowisko programistyczne Najważniejsze różnice C/C++ vs Java Cechy C++ Język ogólnego przeznaczenia Można programować obiektowo i strukturalnie Bardzo wysoka wydajność kodu wynikowego

Bardziej szczegółowo

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

Wykład 4. Klasa List Kolejki Stosy Słowniki Wykład 4 Klasa List Kolejki Stosy Słowniki Klasa List Poważną niedogodnością tablic jako kolekcji danych jest fakt, że muszą one mieć stały rozmiar. Programista musi wiedzieć z góry ile miejsca powinien

Bardziej szczegółowo

Język programowania zbiór reguł określających, które ciągi symboli tworzą program komputerowy oraz jakie obliczenia opisuje ten program.

Język programowania zbiór reguł określających, które ciągi symboli tworzą program komputerowy oraz jakie obliczenia opisuje ten program. PYTHON Język programowania zbiór reguł określających, które ciągi symboli tworzą program komputerowy oraz jakie obliczenia opisuje ten program. Aby program napisany w danym języku mógł być wykonany, niezbędne

Bardziej szczegółowo

Programowanie obiektowe i zdarzeniowe wykład 4 Kompozycja, kolekcje, wiązanie danych

Programowanie obiektowe i zdarzeniowe wykład 4 Kompozycja, kolekcje, wiązanie danych Programowanie obiektowe i zdarzeniowe wykład 4 Kompozycja, kolekcje, wiązanie danych Obiekty reprezentują pewne pojęcia, przedmioty, elementy rzeczywistości. Obiekty udostępniają swoje usługi: metody operacje,

Bardziej szczegółowo

Wstęp do wiadomości teoretycznych (nie, nie jest to masło maślane ani wstęp, wstępów proszę cierpliwie czytać)

Wstęp do wiadomości teoretycznych (nie, nie jest to masło maślane ani wstęp, wstępów proszę cierpliwie czytać) Języki i Paradygmaty Programowania Laboratorium 1 Obiekty i klasy C++ Wstęp do wiadomości teoretycznych (nie, nie jest to masło maślane ani wstęp, wstępów proszę cierpliwie czytać) UWAGA! Umiejętność tworzenia

Bardziej szczegółowo

Środowisko programistyczne GEANT4

Środowisko programistyczne GEANT4 Środowisko programistyczne GEANT4 Leszek Adamczyk Wydział Fizyki i Informatyki Stosowanej Akademia Górniczo-Hutnicza Wykłady w semestrze zimowym 2013/2014 Informacje wstępne Kurs oparty jest na: dokumentacji

Bardziej szczegółowo

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

FUNKCJE WZORCOWE. Wykład 10. Programowanie Obiektowe (język C++) Funkcje wzorcowe wprowadzenie (2) Funkcje wzorcowe wprowadzenie (1) Programowanie Obiektowe (język C++) Wykład 10. FUNKCJE WZORCOWE Funkcje wzorcowe wprowadzenie (1) Funkcje wzorcowe wprowadzenie (2) int max ( int a, int b ) return a>b? a : b; Aby mieć analogiczną funkcję

Bardziej szczegółowo

Podstawy Programowania Podstawowa składnia języka C++

Podstawy Programowania Podstawowa składnia języka C++ Podstawy Programowania Podstawowa składnia języka C++ Katedra Analizy Nieliniowej, WMiI UŁ Łódź, 3 października 2013 r. Szablon programu w C++ Najprostszy program w C++ ma postać: #include #include

Bardziej szczegółowo

Program 14. #include #include using namespace std;

Program 14. #include <iostream> #include <ctime> using namespace std; Program 14 Napisać: * funkcję słuŝącą do losowego wypełniania tablicy liczbami całkowitymi z podanego zakresu (*). Parametrami funkcji mają być tablica, jej długość oraz dwie liczby stanowiące krańce przedziału

Bardziej szczegółowo

Wstęp do Programowania, laboratorium 02

Wstęp do Programowania, laboratorium 02 Wstęp do Programowania, laboratorium 02 Zadanie 1. Napisać program pobierający dwie liczby całkowite i wypisujący na ekran największą z nich. Zadanie 2. Napisać program pobierający trzy liczby całkowite

Bardziej szczegółowo

Wykład 2 Operacje wejściawyjścia. Ewa Gajda

Wykład 2 Operacje wejściawyjścia. Ewa Gajda Wykład 2 Operacje wejściawyjścia w C++ Ewa Gajda Strumienie Operacje wejścia-wyjścia w C++ realizowane są przy pomocy tak zwanych strumieni. Strumieo można sobie wyobrażad jako ciąg znaków bądź bajtów

Bardziej szczegółowo

Podstawy języka skryptowego Lua

Podstawy języka skryptowego Lua Podstawy języka skryptowego Lua Wykorzystanie Lua w C++ Krzysztof Rossa - digiboy rbox_usuń_@o2.pl 2007-07-29 Kontakt z autorem: rbox_usun_@o2.pl Zawartość Wstęp... 3 Po co używamy skryptów?... 3 Przygotowanie

Bardziej szczegółowo

Pliki. Informacje ogólne. Obsługa plików w języku C

Pliki. Informacje ogólne. Obsługa plików w języku C Pliki Informacje ogólne Plik jest pewnym zbiorem danych, zapisanym w systemie plików na nośniku danych (np. dysku twardym, pendrive, płycie DVD itp.). Może posiadać określone atrybuty, a odwołanie do niego

Bardziej szczegółowo

Drzewa BST i AVL. Drzewa poszukiwań binarnych (BST)

Drzewa BST i AVL. Drzewa poszukiwań binarnych (BST) Drzewa ST i VL Drzewa poszukiwań binarnych (ST) Drzewo ST to dynamiczna struktura danych (w formie drzewa binarnego), która ma tą właściwość, że dla każdego elementu wszystkie elementy w jego prawym poddrzewie

Bardziej szczegółowo

dr inż. Jarosław Forenc

dr inż. Jarosław Forenc Informatyka 2 Politechnika Białostocka - Wydział Elektryczny Elektrotechnika, semestr III, studia niestacjonarne I stopnia Rok akademicki 2012/2013 Wykład nr 6 (07.12.2012) dr inż. Jarosław Forenc Rok

Bardziej szczegółowo

1 Podstawy c++ w pigułce.

1 Podstawy c++ w pigułce. 1 Podstawy c++ w pigułce. 1.1 Struktura dokumentu. Kod programu c++ jest zwykłym tekstem napisanym w dowolnym edytorze. Plikowi takiemu nadaje się zwykle rozszerzenie.cpp i kompiluje za pomocą kompilatora,

Bardziej szczegółowo

Zmienne i struktury dynamiczne

Zmienne i struktury dynamiczne Zmienne i struktury dynamiczne Zmienne dynamiczne są to zmienne, które tworzymy w trakcie działania programu za pomocą operatora new. Usuwa się je operatorem delete. Czas ich występowania w programie jest

Bardziej szczegółowo

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

EGZAMIN 2 (14 WRZEŚNIA 2015) JĘZYK C++ IMIĘ i NAZWISKO: przykładowe odpowiedzi NR: 0 EGZAMIN 2 (14 WRZEŚNIA 2015) JĘZYK C++ 1. Napisz precyzyjnie co to jest ptr jeśli: const * const Foo ptr; ptr to stały wskaźnik do stałego obiektu typu Foo

Bardziej szczegółowo

Zasady programowania Dokumentacja

Zasady programowania Dokumentacja Marcin Kędzierski gr. 14 Zasady programowania Dokumentacja Wstęp 1) Temat: Przeszukiwanie pliku za pomocą drzewa. 2) Założenia projektu: a) Program ma pobierać dane z pliku wskazanego przez użytkownika

Bardziej szczegółowo

Programowanie obiektowe

Programowanie obiektowe Programowanie obiektowe Wykład 2 Marcin Młotkowski 4 marca 2015 Plan wykładu 1 2 3 4 5 Marcin Młotkowski Programowanie obiektowe 2 / 47 Krótki opis C Obiektowy, z kontrolą typów; automatyczne odśmiecanie;

Bardziej szczegółowo

Klasa std::string. Bogdan Kreczmer. ZPCiR IIAiR PWr pokój 307 budynek C3.

Klasa std::string. Bogdan Kreczmer. ZPCiR IIAiR PWr pokój 307 budynek C3. Bogdan Kreczmer ZPCiR IIAiR PWr pokój 307 budynek C3 bogdan.kreczmer@pwr.wroc.pl Copyright c 2006 2008 Bogdan Kreczmer Niniejszy dokument zawiera materiały do wykładu na temat programowania obiektowego.

Bardziej szczegółowo

Programowanie Równoległe wykład 12. Thrust C Maciej Matyka Instytut Fizyki Teoretycznej

Programowanie Równoległe wykład 12. Thrust C Maciej Matyka Instytut Fizyki Teoretycznej Programowanie Równoległe wykład 12 Thrust C++ 30.01.2013 Maciej Matyka Instytut Fizyki Teoretycznej Co to jest Thrust C++? Thrust C++ biblioteka szablonów Interfejs w pewnym sensie spójny z STL Biblioteka

Bardziej szczegółowo

Marcin Matusiak i Łukasz Stasiak

Marcin Matusiak i Łukasz Stasiak Marcin Matusiak i Łukasz Stasiak Lista jest sekwencyjną strukturą danych, która składa się z ciągu elementów tego samego typu. Dostęp do elementów listy jest sekwencyjny tzn. z danego elementu listy możemy

Bardziej szczegółowo

Abstrakcyjne struktury danych w praktyce

Abstrakcyjne struktury danych w praktyce Abstrakcyjne struktury danych w praktyce Wykład 13 7.4 notacja polska A.Szepietowski Matematyka dyskretna rozdział.8 stos kompilacja rozłączna szablony funkcji Przypomnienie Drzewo binarne wyrażenia arytmetycznego

Bardziej szczegółowo

JĘZYKI PROGRAMOWANIA Z PROGRAMOWANIEM OBIEKTOWYM. Laboratorium 3. Instrukcje wyboru

JĘZYKI PROGRAMOWANIA Z PROGRAMOWANIEM OBIEKTOWYM. Laboratorium 3. Instrukcje wyboru JĘZYKI PROGRAMOWANIA Z PROGRAMOWANIEM OBIEKTOWYM Laboratorium 3 Instrukcje wyboru 1 INSTRUKCJE WYBORU Instrukcje sterujące to takie instrukcje, które sterują przebiegiem programu w zależności od spełnienia

Bardziej szczegółowo

Zaawansowane programowanie w C++ (PCP)

Zaawansowane programowanie w C++ (PCP) Wykład 7 - sprytne wskaźniki. 20 kwietnia 2007 Potrzeba współdzielenia kodu źródłowego Pojęcia niezależne od typu: kolekcje (np. listy) algorytmy (np. znajdowania największego elementu) Szablony mechanizm

Bardziej szczegółowo

1 Wielokrotne powtarzanie tych samych operacji

1 Wielokrotne powtarzanie tych samych operacji 1 Wielokrotne powtarzanie tych samych operacji Zadanie 1. roszę porównać następujące programy(efekt działania każdego z nich jest takisam). rzykład 1 przedstawia najbardziej typowy zapis, powodujący wykonanie

Bardziej szczegółowo

EGZAMIN - Wersja A. ALGORYTMY I STRUKTURY DANYCH Lisek89 opracowanie kartki od Pani dr E. Koszelew

EGZAMIN - Wersja A. ALGORYTMY I STRUKTURY DANYCH Lisek89 opracowanie kartki od Pani dr E. Koszelew 1. ( pkt) Dany jest algorytm, który dla dowolnej liczby naturalnej n, powinien wyznaczyd sumę kolejnych liczb naturalnych mniejszych od n. Wynik algorytmu jest zapisany w zmiennej suma. Algorytm i=1; suma=0;

Bardziej szczegółowo

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

1. Wartość, jaką odczytuje się z obszaru przydzielonego obiektowi to: a) I - wartość b) definicja obiektu c) typ oboektu d) p - wartość 1. Wartość, jaką odczytuje się z obszaru przydzielonego obiektowi to: a) I - wartość b) definicja obiektu c) typ oboektu d) p - wartość 2. Poprawna definicja wskażnika b to: a) float *a, **b = &a; b) float

Bardziej szczegółowo

Wprowadzenie do szablonów klas

Wprowadzenie do szablonów 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 2008-2010 Bogdan Kreczmer Niniejszy

Bardziej szczegółowo

ALGORYTMY I STRUKTURY DANYCH

ALGORYTMY I STRUKTURY DANYCH ALGORYTMY I STRUKTURY DANYCH Temat : Drzewa zrównoważone, sortowanie drzewiaste Wykładowca: dr inż. Zbigniew TARAPATA e-mail: Zbigniew.Tarapata@isi.wat.edu.pl http://www.tarapata.strefa.pl/p_algorytmy_i_struktury_danych/

Bardziej szczegółowo

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

Dariusz Brzeziński. Politechnika Poznańska, Instytut Informatyki Dariusz Brzeziński Politechnika Poznańska, Instytut Informatyki W językach niskopoziomowych błędy zgłaszane były przez zwracanie odpowiedniego statusu (liczby) W C main() zwraca int żeby można było określić

Bardziej szczegółowo

Matematyczne Podstawy Informatyki

Matematyczne Podstawy Informatyki Matematyczne Podstawy Informatyki dr inż. Andrzej Grosser Instytut Informatyki Teoretycznej i Stosowanej Politechnika Częstochowska Rok akademicki 2013/2014 Algorytm 1. Termin algorytm jest używany w informatyce

Bardziej szczegółowo

r. Tablice podstawowe operacje na tablicach

r. Tablice podstawowe operacje na tablicach 27.03.2014r. Tablice podstawowe operacje na tablicach Tablica - definicja Tablica (ang. array) lub wektor (ang. vector) jest złożoną strukturą danych (ang. compound data structure) zbudowaną z ciągu elementów

Bardziej szczegółowo