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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Ćwiczenia IV - Kontenery (pojemniki)

Ćwiczenia IV - Kontenery (pojemniki) Ćwiczenia IV - Kontenery (pojemniki) 28 października 2010 Kontener Kontener jest to obiekt który zawiera w sobie obiekty innej klasy i ma zdefiniowane metody nimi zarządzające. Jednym z najprostszych przykładów

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

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

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

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

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

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

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

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

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

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

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

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

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

Programowanie. programowania. Klasa 3 Lekcja 9 PASCAL & C++

Programowanie. programowania. Klasa 3 Lekcja 9 PASCAL & C++ Programowanie Wstęp p do programowania Klasa 3 Lekcja 9 PASCAL & C++ Język programowania Do przedstawiania algorytmów w postaci programów służą języki programowania. Tylko algorytm zapisany w postaci programu

Bardziej szczegółowo

Wstęp do programowania

Wstęp do programowania Wstęp do programowania Podstawowe konstrukcje programistyczne Paweł Daniluk Wydział Fizyki Jesień 2013 P. Daniluk (Wydział Fizyki) WP w. II Jesień 2013 1 / 34 Przypomnienie Programowanie imperatywne Program

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

Programowanie w C++ z użyciem kontenerów - parę przykładów programów Opracowanie: dr hab. Mirosław R. Dudek, prof. UZ

Programowanie w C++ z użyciem kontenerów - parę przykładów programów Opracowanie: dr hab. Mirosław R. Dudek, prof. UZ programowanie w C++ dla OWK Programowanie w C++ z użyciem kontenerów - parę przykładów programów Opracowanie: dr hab. Mirosław R. Dudek, prof. UZ 1 Streszczenie W tym rozdziale podamy kilka najprostszych

Bardziej szczegółowo

Programowanie obiektowe C++

Programowanie obiektowe C++ Programowanie obiektowe C++ Programowanie zorientowane obiektowo Wykład 6 Witold Dyrka witold.dyrka@pwr.wroc.pl 12/11/2012 Prawa autorskie itp. Wiele slajdów do tego wykładu powstało w oparciu o slajdy

Bardziej szczegółowo

Struktury danych: stos, kolejka, lista, drzewo

Struktury danych: stos, kolejka, lista, drzewo Struktury danych: stos, kolejka, lista, drzewo Wykład: dane w strukturze, funkcje i rodzaje struktur, LIFO, last in first out, kolejka FIFO, first in first out, push, pop, size, empty, głowa, ogon, implementacja

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

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

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 programowanie obiektowego w języku C++

Wprowadzenie do programowanie obiektowego w języku C++ Wprowadzenie do programowanie obiektowego w języku C++ Część czwarta 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

Bardziej szczegółowo

Spis treści OBSŁUGA PLIKÓW W JĘZYKU C++ Informatyka 2. Instrukcja do pracowni specjalistycznej z przedmiotu. Numer ćwiczenia INF32

Spis treści OBSŁUGA PLIKÓW W JĘZYKU C++ Informatyka 2. Instrukcja do pracowni specjalistycznej z przedmiotu. Numer ćwiczenia INF32 Politechnika Białostocka Wydział Elektryczny Katedra Elektrotechniki Teoretycznej i Metrologii Instrukcja do pracowni specjalistycznej z przedmiotu Informatyka 2 Kod przedmiotu: ES1C300 016 (studia stacjonarne)

Bardziej szczegółowo

Iteratory, Alokatory, Przyszłość C++, Boost

Iteratory, Alokatory, Przyszłość C++, Boost Iteratory, Alokatory, Przyszłość C++, Boost Biblioteka STL Sebastian Deorowicz Politechnika Śląska 2006 11 13 Sebastian Deorowicz (PŚl) Iteratory, Alokatory, Przyszłość C++, Boost 2006 11 13 1 / 50 Plan

Bardziej szczegółowo

Laboratorium 1 - Programowanie proceduralne i obiektowe

Laboratorium 1 - Programowanie proceduralne i obiektowe Laboratorium 1 - Programowanie proceduralne i obiektowe mgr inż. Kajetan Kurus 4 marca 2014 1 Podstawy teoretyczne 1. Programowanie proceduralne (powtórzenie z poprzedniego semestru) (a) Czym się charakteryzuje?

Bardziej szczegółowo

۰ Elementem jednostkowym takiego pliku jest bajt. ۰ Format pliku binarnego: [bajty pliku][eof]

۰ Elementem jednostkowym takiego pliku jest bajt. ۰ Format pliku binarnego: [bajty pliku][eof] 1 Plik jest wydzielonym fragmentem pamięci (najczęściej dyskowej) posiadającym nazwę. Z punktu widzenia C plik jest ciągiem bajtów, z których każdy może zostać oddzielnie odczytany. Zgodnie ze standardem

Bardziej szczegółowo

Algorytm. a programowanie -

Algorytm. a programowanie - Algorytm a programowanie - Program komputerowy: Program komputerowy można rozumieć jako: kod źródłowy - program komputerowy zapisany w pewnym języku programowania, zestaw poszczególnych instrukcji, plik

Bardziej szczegółowo

Ściąga z JTP. (Ja Tjeba Pierd...) Uwagi, nowe pytania, poprawki itd. zgłaszać na forum mambo.

Ściąga z JTP. (Ja Tjeba Pierd...) Uwagi, nowe pytania, poprawki itd. zgłaszać na forum mambo. Spis treści Ściąga z JTP (Ja Tjeba Pierd...) Uwagi, nowe pytania, poprawki itd. zgłaszać na forum mambo. Rzutowanie typów...1 Obiektówka i polimorfizm...2 Szablony...6 Wyjątki...8 STL i biblioteka standardowa...10

Bardziej szczegółowo

Lista 2. int porownaj_liczby_normalnie(const int a, const int b) { if(a==b) return 0; if(a>b)return1; return-1; }

Lista 2. int porownaj_liczby_normalnie(const int a, const int b) { if(a==b) return 0; if(a>b)return1; return-1; } Lista 2 Poniższe zadania mają na celu jedynie pomoc w szlifowaniu umiejętności logicznego myślenia, analizowania i rozwiązywania pewnych zagadnienień algorytmicznych. Zadanie 1. W algorytmach opartych

Bardziej szczegółowo

wagi cyfry 7 5 8 2 pozycje 3 2 1 0

wagi cyfry 7 5 8 2 pozycje 3 2 1 0 Wartość liczby pozycyjnej System dziesiętny W rozdziale opiszemy pozycyjne systemy liczbowe. Wiedza ta znakomicie ułatwi nam zrozumienie sposobu przechowywania liczb w pamięci komputerów. Na pierwszy ogień

Bardziej szczegółowo

JSLib 4.1 Dokumentacja

JSLib 4.1 Dokumentacja 28 kwietnia 2015 JSLib 4.1 Dokumentacja Spis treści 1 Wprowadzenie 2 2 Klasa BigInt 2 2.1 Tworzenie liczb....................... 2 2.2 Operacje wejścia-wyjścia.................. 3 2.3 Operatory..........................

Bardziej szczegółowo

Wstęp do Informatyki

Wstęp do Informatyki Wstęp do Informatyki Bożena Woźna-Szcześniak bwozna@gmail.com Jan Długosz University, Poland Wykład 11 Bożena Woźna-Szcześniak (AJD) Wstęp do Informatyki Wykład 11 1 / 52 Pętla for # i n c l u d e

Bardziej szczegółowo

Rekurencja (rekursja)

Rekurencja (rekursja) Rekurencja (rekursja) Rekurencja wywołanie funkcji przez nią samą wewnątrz ciała funkcji. Rekurencja może być pośrednia funkcja jest wywoływana przez inną funkcję, wywołaną (pośrednio lub bezpośrednio)

Bardziej szczegółowo

Arytmetyka komputera. Na podstawie podręcznika Urządzenia techniki komputerowej Tomasza Marciniuka. Opracował: Kamil Kowalski klasa III TI

Arytmetyka komputera. Na podstawie podręcznika Urządzenia techniki komputerowej Tomasza Marciniuka. Opracował: Kamil Kowalski klasa III TI Arytmetyka komputera Na podstawie podręcznika Urządzenia techniki komputerowej Tomasza Marciniuka Opracował: Kamil Kowalski klasa III TI Spis treści 1. Jednostki informacyjne 2. Systemy liczbowe 2.1. System

Bardziej szczegółowo

Informatyka 2. Informatyka 2. Wykład nr 1 (04.10.2008) Dane podstawowe. - Wydział Elektryczny. Politechnika Białostocka. Program wykładu (1/2)

Informatyka 2. Informatyka 2. Wykład nr 1 (04.10.2008) Dane podstawowe. - Wydział Elektryczny. Politechnika Białostocka. Program wykładu (1/2) Rok akademicki 2008/2009, Wykład nr 1 2/25 Dane podstawowe Informatyka 2 Politechnika Białostocka - Wydział Elektryczny Elektrotechnika, semestr III, studia niestacjonarne I stopnia (zaoczne) Rok akademicki

Bardziej szczegółowo

Programowanie obiektowe i C++ dla matematyków

Programowanie obiektowe i C++ dla matematyków Programowanie obiektowe i C++ dla matematyków Bartosz Szreder szreder (at) mimuw... 8 XI 2 1 Sposoby przekazywania argumentów Powiedzmy, że chcemy napisać funkcję, która zamieni miejscami wartość dwóch

Bardziej szczegółowo

Języki i paradygmaty programowania

Języki i paradygmaty programowania Języki i paradygmaty programowania WYDZIAŁ ELEKTRONIKI i INFORMATYKI dr inż. Robert Arsoba Politechnika Koszalińska Wydział Elektroniki i Informatyki POLITECHNIKA KOSZALIŃSKA 2009/2010 Materiały do wykładu

Bardziej szczegółowo

Konstrukcje warunkowe Pętle

Konstrukcje warunkowe Pętle * Konstrukcje warunkowe Pętle *Instrukcja if sposób na sprawdzanie warunków *Konstrukcja: if(warunek) else { instrukcje gdy warunek spełniony} {instrukcje gdy warunek NIE spełniony} * 1. Wylicz całkowity

Bardziej szczegółowo

Wstęp do programowania, część I

Wstęp do programowania, część I Wstęp do programowania, część I Rafał J. Wysocki Instytut Fizyki Teoretycznej, Wydział Fizyki UW 12 października 2011 Rafał J. Wysocki (rwys@fuw.edu.pl) Wstęp do programowania, część I 12 października

Bardziej szczegółowo

C++ - [3-5] Pliki i strumienie w C++

C++ - [3-5] Pliki i strumienie w C++ Slajd 1 z 13 C++ - [3-5] Pliki i strumienie w C++ Nysa 2004-2013. Autor: Wojciech Galiński. wersja dnia 19 maja 2013 r. Slajd 2 z 13 Klasy i obiekty do obsługi plików Aby korzystać z obiektów do obsługi

Bardziej szczegółowo

* WWW: * E-mail: * Adres: Instytut Informatyki ul. Będzińska 39 41-200 Sosnowiec Pokój 214 * Telefon: 32 3689765

* WWW: * E-mail: * Adres: Instytut Informatyki ul. Będzińska 39 41-200 Sosnowiec Pokój 214 * Telefon: 32 3689765 * Łagodny start * * WWW: * E-mail: * Adres: Instytut Informatyki ul. Będzińska 39 41-200 Sosnowiec Pokój 214 * Telefon: 32 3689765 Zaliczenie zajęć: 3-4 kolokwia + obecność ALBO Projekt zaliczeniowy +

Bardziej szczegółowo

Wstęp do Programowania 2

Wstęp do Programowania 2 Wstęp do Programowania 2 dr Bożena Woźna-Szcześniak bwozna@gmail.com Akademia im. Jana Długosza Wykład 4 Funkcje przeciażone - Idea Przeciażanie funkcji (polimorfizm funkcji), to kolejna nowość w języku

Bardziej szczegółowo

Temat 1. Podstawy Środowiska Xcode i wprowadzenie do języka Objective-C

Temat 1. Podstawy Środowiska Xcode i wprowadzenie do języka Objective-C Temat 1. Podstawy Środowiska Xcode i wprowadzenie do języka Objective-C Wymagana wiedza wstępna: 1) Student musi 1) Znać język C 2) Znać zasady zarządzania pamięcią w komputerze 3) Znać pojecie wskaźnika

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

Egzamin z Podstaw informatyki i programowania 2007/2008

Egzamin z Podstaw informatyki i programowania 2007/2008 Egzamin z Podstaw informatyki i programowania 2007/2008 Imię i nazwisko:... 1 2 3 4 5 6 7 8 9 10 11 12 13 14 suma 1. Napisz funkcję logiczną, która dla zadanej parametrem wartości rzeczywistej x, oblicza

Bardziej szczegółowo

PROGRAMOWANIE NISKOPOZIOMOWE. Struktury w C. Przykład struktury PN.06. c Dr inż. Ignacy Pardyka. Rok akad. 2011/2012

PROGRAMOWANIE NISKOPOZIOMOWE. Struktury w C. Przykład struktury PN.06. c Dr inż. Ignacy Pardyka. Rok akad. 2011/2012 PROGRAMOWANIE NISKOPOZIOMOWE PN.06 c Dr inż. Ignacy Pardyka UNIWERSYTET JANA KOCHANOWSKIEGO w Kielcach Rok akad. 2011/2012 1 2 Ćwiczenia laboratoryjne c Dr inż. Ignacy Pardyka (Inf.UJK) PN.06 Rok akad.

Bardziej szczegółowo

Programowanie obiektowe, wykład nr 6. Klasy i obiekty

Programowanie obiektowe, wykład nr 6. Klasy i obiekty Dr hab. inż. Lucyna Leniowska, prof. UR, Zakład Mechatroniki, Automatyki i Optoelektroniki, IT Programowanie obiektowe, wykład nr 6 Klasy i obiekty W programowaniu strukturalnym rozwój oprogramowania oparto

Bardziej szczegółowo

Obliczenia na stosie. Wykład 9. Obliczenia na stosie. J. Cichoń, P. Kobylański Wstęp do Informatyki i Programowania 266 / 303

Obliczenia na stosie. Wykład 9. Obliczenia na stosie. J. Cichoń, P. Kobylański Wstęp do Informatyki i Programowania 266 / 303 Wykład 9 J. Cichoń, P. Kobylański Wstęp do Informatyki i Programowania 266 / 303 stos i operacje na stosie odwrotna notacja polska języki oparte na ONP przykłady programów J. Cichoń, P. Kobylański Wstęp

Bardziej szczegółowo

MS Excel 2007 Kurs zaawansowany Obsługa baz danych. prowadzi: Dr inż. Tomasz Bartuś. Kraków: 2008 04 25

MS Excel 2007 Kurs zaawansowany Obsługa baz danych. prowadzi: Dr inż. Tomasz Bartuś. Kraków: 2008 04 25 MS Excel 2007 Kurs zaawansowany Obsługa baz danych prowadzi: Dr inż. Tomasz Bartuś Kraków: 2008 04 25 Bazy danych Microsoft Excel 2007 udostępnia szereg funkcji i mechanizmów obsługi baz danych (zwanych

Bardziej szczegółowo

Python wstęp do programowania dla użytkowników WCSS

Python wstęp do programowania dla użytkowników WCSS Python wstęp do programowania dla użytkowników WCSS Dr inż. Krzysztof Berezowski Instytut Informatyki, Automatyki i Robotyki Politechniki Wrocławskiej Wprowadzenie CHARAKTERYSTYKA JĘZYKA Filozofia języka

Bardziej szczegółowo

Kurs WWW. Paweł Rajba. pawel@ii.uni.wroc.pl http://pawel.ii.uni.wroc.pl/

Kurs WWW. Paweł Rajba. pawel@ii.uni.wroc.pl http://pawel.ii.uni.wroc.pl/ Paweł Rajba pawel@ii.uni.wroc.pl http://pawel.ii.uni.wroc.pl/ Spis treści Wprowadzenie Automatyczne ładowanie klas Składowe klasy, widoczność składowych Konstruktory i tworzenie obiektów Destruktory i

Bardziej szczegółowo

Podstawowe elementy proceduralne w C++ Program i wyjście. Zmienne i arytmetyka. Wskaźniki i tablice. Testy i pętle. Funkcje.

Podstawowe elementy proceduralne w C++ Program i wyjście. Zmienne i arytmetyka. Wskaźniki i tablice. Testy i pętle. Funkcje. Podstawowe elementy proceduralne w C++ Program i wyjście Zmienne i arytmetyka Wskaźniki i tablice Testy i pętle Funkcje Pierwszy program // Niezbędne zaklęcia przygotowawcze ;-) #include using

Bardziej szczegółowo

Algorytmy i. Wykład 3: Stosy, kolejki i listy. Dr inż. Paweł Kasprowski. FIFO First In First Out (kolejka) LIFO Last In First Out (stos)

Algorytmy i. Wykład 3: Stosy, kolejki i listy. Dr inż. Paweł Kasprowski. FIFO First In First Out (kolejka) LIFO Last In First Out (stos) Algorytmy i struktury danych Wykład 3: Stosy, kolejki i listy Dr inż. Paweł Kasprowski pawel@kasprowski.pl Kolejki FIFO First In First Out (kolejka) LIFO Last In First Out (stos) Stos (stack) Dostęp jedynie

Bardziej szczegółowo

UML a kod w C++ i Javie. Przypadki użycia. Diagramy klas. Klasy użytkowników i wykorzystywane funkcje. Związki pomiędzy przypadkami.

UML a kod w C++ i Javie. Przypadki użycia. Diagramy klas. Klasy użytkowników i wykorzystywane funkcje. Związki pomiędzy przypadkami. UML a kod w C++ i Javie Projektowanie oprogramowania Dokumentowanie oprogramowania Diagramy przypadków użycia Przewoznik Zarzadzanie pojazdami Optymalizacja Uzytkownik Wydawanie opinii Zarzadzanie uzytkownikami

Bardziej szczegółowo

2 Przygotował: mgr inż. Maciej Lasota

2 Przygotował: mgr inż. Maciej Lasota Laboratorium nr 2 1/7 Język C Instrukcja laboratoryjna Temat: Wprowadzenie do języka C 2 Przygotował: mgr inż. Maciej Lasota 1) Wprowadzenie do języka C. Język C jest językiem programowania ogólnego zastosowania

Bardziej szczegółowo

Wykład 4: Klasy i Metody

Wykład 4: Klasy i Metody Wykład 4: Klasy i Metody Klasa Podstawa języka. Każde pojęcie które chcemy opisać w języku musi być zawarte w definicji klasy. Klasa definiuje nowy typ danych, których wartościami są obiekty: klasa to

Bardziej szczegółowo

Podstawy programowania w języku C++

Podstawy programowania w języku C++ Podstawy programowania w języku C++ Część dziesiąta Rekordy w C/C++ struktury Autor Roman Simiński Kontakt roman.siminski@us.edu.pl www.programowanie.siminskionline.pl Niniejsze opracowanie zawiera skrót

Bardziej szczegółowo

Konstruktory. Streszczenie Celem wykładu jest zaprezentowanie konstruktorów w Javie, syntaktyki oraz zalet ich stosowania. Czas wykładu 45 minut.

Konstruktory. Streszczenie Celem wykładu jest zaprezentowanie konstruktorów w Javie, syntaktyki oraz zalet ich stosowania. Czas wykładu 45 minut. Konstruktory Streszczenie Celem wykładu jest zaprezentowanie konstruktorów w Javie, syntaktyki oraz zalet ich stosowania. Czas wykładu 45 minut. Rozpatrzmy przykład przedstawiający klasę Prostokat: class

Bardziej szczegółowo

Oprogramowanie i wykorzystanie stacji roboczych. Wykład 4

Oprogramowanie i wykorzystanie stacji roboczych. Wykład 4 Wykład 4 p. 1/1 Oprogramowanie i wykorzystanie stacji roboczych Wykład 4 Dr inż. Tomasz Olas olas@icis.pcz.pl Instytut Informatyki Teoretycznej i Stosowanej Politechnika Częstochowska Obsługa sieci Wykład

Bardziej szczegółowo

Tworzenie aplikacji w języku Java

Tworzenie aplikacji w języku Java Tworzenie aplikacji w języku Java Wykład 2 Java Collections Framework Piotr Czapiewski Wydział Informatyki ZUT 2 października 2009 Piotr Czapiewski (Wydział Informatyki ZUT) Tworzenie aplikacji w języku

Bardziej szczegółowo

METODY I JĘZYKI PROGRAMOWANIA PROGRAMOWANIE STRUKTURALNE. Wykład 02

METODY I JĘZYKI PROGRAMOWANIA PROGRAMOWANIE STRUKTURALNE. Wykład 02 METODY I JĘZYKI PROGRAMOWANIA PROGRAMOWANIE STRUKTURALNE Wykład 02 NAJPROSTSZY PROGRAM /* (Prawie) najprostszy przykład programu w C */ /*==================*/ /* Między tymi znaczkami można pisać, co się

Bardziej szczegółowo

Realizacja ekstensji klasy. Paulina Strzelecka, Tomasz Roszkowski

Realizacja ekstensji klasy. Paulina Strzelecka, Tomasz Roszkowski Realizacja ekstensji klasy Paulina Strzelecka, Tomasz Roszkowski Przechowywanie obiektów (odwolañ do obiektów) w Javie typ wbudowany - tablica zbiór klas kontenerowych Paulina Strzelecka, Tomasz Roszkowski

Bardziej szczegółowo