STL: algorytmy sortujące. STL: algorytmy sortujące. STL: algorytmy sortujące. STL: algorytmy sortujące. STL: algorytmy sortujące

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

Download "STL: algorytmy sortujące. STL: algorytmy sortujące. STL: algorytmy sortujące. STL: algorytmy sortujące. STL: algorytmy sortujące"

Transkrypt

1 1. partition 2. stable_partition 3. sort 4. stable_sort 5. partial_sort 6. partial_sort_copy 7. nth_element 8. lower_bound 9. upper_bound 10.equal_range 11.binary_search 12.merge 13.inplace_merge 14.includes 15.set_union 16.set_intersection 17.set_difference 18.set_symmetric_difference 19.lexicographical_compare 20.next_permutation template<class BidirectionalIterator, class Predicate> BidirectionalIterator partition( BidirectionalIterator _First, BidirectionalIterator _Last, BinaryPredicate _Comp ); porządkuje na nowo sekwencję elementów tak, że w pierwszej kolejności w sekwencji znajdują się elementy spełniające warunek podany w predykacie, a następnie pozostałe, niespełniające warunku. Zwracany iterator wskazuje element graniczny, tj. pierwszy element niespełniający warunku z predykatu #include <algorithm> // std::partition bool Nieparzyste (int i) { return (i%2)==1; std::vector<int> V; for (int i=1; i<10; ++i) V.push_back(i); // std::vector<int>::iterator bound; bound = std::partition (V.begin(), V.end(), Nieparzyste); std::cout << nieparzyste elementy:"; for (std::vector<int>::iterator it=v.begin(); it!=bound; ++it) std::cout << parzyste elementy:"; for (std::vector<int>::iterator it=bound; it!=v.end(); ++it) 92 template<class BidirectionalIterator, class Predicate> BidirectionalIterator stable_partition( BidirectionalIterator _First, BidirectionalIterator _Last, Predicate _Pred ); porządkuje na nowo sekwencję elementów tak, że w pierwszej kolejności w sekwencji znajdują się elementy spełniające warunek podany w predykacie, a następnie pozostałe, niespełniające warunku. Zwracany iterator wskazuje element graniczny, tj. pierwszy element niespełniający warunku z predykatu porządkowanie jest stabilne. Co to znaczy, że jest stabilne? 93 Szereg algorytmów porządkujących występuje w wersjach stabilnych i niestabilnych. Wersje stabilne zachowują wzajemne uporządkowanie elementów traktowanych jako identyczne z punktu widzenia funkcji porządkującej, np. sekwencja: C 1,B 1,C 2,A 1,B 2,A 2 po posortowaniu pod względem dużej litery algorytmem stabilnym będzie miała postać: A 1,A 2,B 1,B 2,C 1,C 2 natomiast po posortowaniu algorytmem niestabilnym może mieć np. postać: A 2,A 1,B 1,B 2,C 2,C 1 Np. implementacja algorytmu sort w STL jest oparta na quicksort, a więc jest niestabilna. Istnieje jednak również wersja stable_sort, która zachowuje wzajemne uporządkowanie elementów identycznych. template<class RandomAccessIterator> void sort( RandomAccessIterator _First, RandomAccessIterator _Last ); template<class BidirectionalIterator> void stable_sort( BidirectionalIterator _First, BidirectionalIterator _Last ); porządkuje elementy w sekwencji określanej przez parę iteratorów [_First,_Last) w porządku nierosnącym,

2 #include <algorithm> // std::stable_sort bool porownajint (double i,double j) { return (int(i)<int(j)); ; double mydoubles[] = {3.14, 1.41, 2.72, 4.67, 1.73, 1.32, 1.62, 2.58; std::vector<double> V; V.assign(mydoubles,mydoubles+8); std::cout << "sortowanie porownajint:"; std::stable_sort (V.begin(), V.end(), porownajint); for (std::vector<double>::iterator it=v.begin(); it!=v.end(); ++it) template<class RandomAccessIterator> void partial_sort( RandomAccessIterator _First, RandomAccessIterator _SortEnd, RandomAccessIterator _Last ); sortuje ograniczoną liczbę elementów z sekwencji określanej przez parę iteratorów [_First,_Last) w porządku nierosnącym, którą da się zmieścić w zakresie [_First,_SortEnd). Reszta elementów trafia do [_SortEnd,_Last) w nieokreślonej kolejności, #include <algorithm> // std::partial_sort bool porownaj (int i,int j) { return (i<j); int myints[] = {9,8,7,6,5,4,3,2,1; std::vector<int> V (myints, myints+9); std::partial_sort (V.begin(), V.begin()+5, V.end(), porownaj); std::cout << "V zawiera:"; for (std::vector<int>::iterator it=v.begin(); it!=v.end(); ++it) template<class InputIterator, class RandomAccessIterator> RandomAccessIterator partial_sort_copy( InputIterator _First1, InputIterator _Last1, RandomAccessIterator _First2, RandomAccessIterator _Last2 ); Sortuje liczbę elementów z sekwencji określanej przez parę iteratorów [_First1,_Last1) w porządku nierosnącym, którą da się umieścić w zakresie [_First2,_Last2) i kopiuje posortowane elementy do sekwencji [_First2,_Last2), Jeżeli [_First1,_Last1) jest mniejszy od [_First2,_Last2), kopiowana jest mniejsza liczba elementów, #include <algorithm> // std::partial_sort_copy bool porownaj (int i,int j) { return (i<j); ; int myints[] = {9,8,7,6,5,4,3,2,1; std::vector<int> V (5); std::partial_sort_copy (myints, myints+9, V.begin(), V.end(), porownaj); std::cout << "V zawiera:"; for (std::vector<int>::iterator it=v.begin(); it!=v.end(); ++it) template<class RandomAccessIterator> void nth_element( RandomAccessIterator _First, RandomAccessIterator _Nth, RandomAccessIterator _Last ); częściowo sortuje sekwencję określaną przez parę iteratorów [_First,_Last) w porządku nierosnącym. To znaczy, że: po posortowaniu elementy mniejsze od elementu wskazywane przez _Nth umieszczane są w lewej części sekwencji, tj. [_First, _Nth), natomiast większe w prawej [_Nth,_Last). Jednak żadna z podsekwencji nie musi być posortowana,

3 #include <algorithm> // std::nth_element, std::random_shuffle bool porownaj (int i,int j) { return (i>j); std::vector<int> V; for (int i=1; i<10; i++) V.push_back(i); // std::random_shuffle (V.begin(), V.end()); std::nth_element (V.begin(), V.begin()+5, V.end(), porownaj); std::cout << "V contains:"; for (std::vector<int>::iterator it=v.begin(); it!=v.end(); ++it) template<class ForwardIterator, class Type> ForwardIterator lower_bound( ForwardIterator _First, ForwardIterator _Last, const Type& _Val ); zwraca iterator na pierwsze wystąpienie w posortowanej sekwencji [_First,_Last) elementu o wartości _Val, jeżeli w sekwencji brak takiego elementu, zwracany jest iterator do miejsca, w którym element ten powinien się znajdować, tj. do pierwszego elementu większego od poszukiwanej wartości, template<class ForwardIterator, class Type> ForwardIterator upper_bound( ForwardIterator _First, ForwardIterator _Last, const Type& _Val ); zwraca iterator na pierwszy element za ostatnim elementem o wartości _Val w posortowanej sekwencji [_First,_Last), jeżeli w sekwencji brak takiego elementu, zwracany jest iterator do miejsca, w którym element ten powinien się znajdować, tj. do pierwszego elementu większego od poszukiwanej wartości, 104 #include <iostream> #include <algorithm> #include <vector> // std::cout // std::lower_bound, std::upper_bound, std::sort // std::vector int myints[] = {10,20,30,30,20,10,10,20; std::vector<int> v(myints,myints+8); // std::sort (v.begin(), v.end()); // std::vector<int>::iterator low,up; low=std::lower_bound (v.begin(), v.end(), 20); // up= std::upper_bound (v.begin(), v.end(), 20); // std::cout << "lower_bound at position " << (low- v.begin()) << '\n'; std::cout << "upper_bound at position " << (up - v.begin()) << '\n'; ^ ^ 105 template<class ForwardIterator, class Type> pair<forwarditerator, ForwardIterator> equal_range( ForwardIterator _First, ForwardIterator _Last, const Type& _Val ); zwraca parę iteratorów ograniczających w sekwencji [_First,_Last) podsekwencję elementów o wartości _Val, jeżeli w sekwencji brak takiego elementu, iteratory wskazują na miejsce, w którym element ten powinien się znajdować, tj. do pierwszego elementu większego od poszukiwanej wartości, szablonu reprezentującym obiekt funkcyjny/funkcję służący do porównań, Uwaga: elementy powinny być posortowane względem operatora < (elementy są uważane za równe, jeżeli: (!(a<b) &&!(b<a))) lub podanego obiektu funkcyjnego/funkcji służącej do porównań. 106 #include <algorithm> // std::equal_range, std::sort bool mygreater (int i,int j) { return (i>j); int myints[] = {10,20,30,30,20,10,10,20; std::vector<int> V(myints,myints+8); // std::pair<std::vector<int>::iterator,std::vector<int>::iterator> bounds; std::sort (v.begin(), v.end(), mygreater); // bounds=std::equal_range ( v.begin(), v.end(), 20, mygreater); // ^ ^ std::cout << "bounds at positions " << (bounds.first - v.begin()); std::cout << " and " << (bounds.second - v.begin()) << '\n'; 107 3

4 template <class ForwardIterator, class T> bool binary_search ( ForwardIterator _First, ForwardIterator _Last, const T& _Val); zwraca wartość logiczną true, jeżeli w posortowanej sekwencji [_First,_Last) znajduje się element o wartości _Val (dwa elementy a i b są uważane za równe, jeżeli: (!(a<b) &&!(b<a))), optymalizuje liczbę porównań poprzez dokonywanie porównań między niesąsiadującymi elementami z posortowanego zakresu, template<class InputIterator1, class InputIterator2, class OutputIterator> OutputIterator merge( InputIterator2 _First2, InputIterator2 _Last2, łączy dwa identycznie posortowane zakresy elementów [_First1,_Last1) i [_First2,_Last2) w jeden posortowany zakres docelowy, którego początek jest wskazywany przez _Result, #include <iostream> #include <algorithm> #include <vector> // std::cout // std::merge, std::sort // std::vector int first[] = {5,10,15,20,25; int second[] = {50,40,30,20,10; std::vector<int> v(10); std::sort (first,first+5); std::sort (second,second+5); std::merge (first,first+5,second,second+5,v.begin()); std::cout << "Wynikowy wektor zawiera:"; // for (std::vector<int>::iterator it=v.begin(); it!=v.end(); ++it) 110 template<class BidirectionalIterator> void inplace_merge( BidirectionalIterator _First, BidirectionalIterator _Middle, BidirectionalIterator _Last ); łączy dwa posortowane zakresy elementów [_First,_Middle) i [_Middle,_Last) w jeden sumaryczny zakres docelowy [_First,_Last). Alokuje pomocniczy bufor na dane, aby zwiększyć efektywność, a jeżeli jest to niemożliwe, używa mniej efektywnego algorytmu. Różnice merge vs. inplace_merge: merge: liczba porównań co najwyżej distance(first1, last1) + distance(first2, last2) 1 inplace_merge: dokładnie N-1 porównań, jeżeli dostępny jest wystarczający obszar pamięci, w przeciwnym razie: N log(n) gdzie N = distance(first, last). 111 Różnice merge vs. inplace_merge: std::inplace_merge(a.begin(), a.begin() + n, a.end()); nie jest równoważny: std::merge(a.begin(), a.begin() + n, a.begin() + n, a.end(), a.begin()); ponieważ merge nie może skierować wyniku swojego działania do a (tj. do tego samego kontenera, z którego pochodziły dane wejściowe). Gdybyśmy się jednak upierali, to w takim przypadku należałoby napisać np.: decltype(a) b; std::merge(a.begin(), a.begin() + n, a.begin() + n, a.end(), std::back_inserter(b)); back_inserter konstruuje iterator, który umieszcza nowe elementy na końcu zawartości kontenera podanego w argumencie (kontener musi mieć metodę push_back). Przypisane wartości do tego iteratora są dodawane na końcu. 112 #include <algorithm> // std::inplace_merge, std::sort, std::copy int first[] = {5,10,15,20,25; int second[] = {50,40,30,20,10; std::vector<int> v(10); std::vector<int>::iterator it; std::sort (first,first+5); std::sort (second,second+5); it=std::copy (first, first+5, v.begin()); std::copy (second,second+5,it); std::inplace_merge (v.begin(),v.begin()+5,v.end()); std::cout << " Wynikowy wektor zawiera :"; // for (it=v.begin(); it!=v.end(); ++it) UKSW, WMP. SNS, Warszawa 113 4

5 template<class InputIterator1, class InputIterator2> bool includes( InputIterator2 _First2, InputIterator2 _Last2); sprawdza, czy wszystkie wartości z jednego posortowanego zakresu [_First1,_Last1) są zawarte w drugim (_First2,_Last2) (tj. czy pierwszy jest podzbiorem drugiego dwa elementy a i b są uważane za równe, jeżeli: (!(a<b) &&!(b<a))), #include <algorithm> // std::includes, std::sort bool porownaj (int i, int j) { return i<j; int C1[] = {5,10,15,20,25,30,35,40,45,50; int C2[] = {40,30,20,10; std::sort (C1,C1+10); std::sort (C2,C2+4); if ( std::includes(c1,c1+10,c2,c2+4, porownaj) ) std::cout << "C1 zawiera C2!\n"; template<class InputIterator1, class InputIterator2, class OutputIterator> OutputIterator set_union( InputIterator2 _First2, InputIterator2 _Last2, Łączy wszystkie elementy znajdujące się w przynajmniej jednym z dwóch posortowanych zakresów tworząc jeden wspólny posortowany zakres wynikowy (suma zbiorów) dwa elementy a i b są uważane za równe, jeżeli: (!(a<b) &&!(b<a)), 116 #include <algorithm> // std::set_union, std::sort int first[] = {5,10,15,20,25; int second[] = {50,40,30,20,10; std::vector<int> v(10); // std::vector<int>::iterator it; std::sort (first,first+5); // std::sort (second,second+5); // it=std::set_union (first, first+5, second, second+5, v.begin()); // v.resize(it-v.begin()); // std::cout << "Suma ma " << (v.size()) << " elementów:\n"; for (it=v.begin(); it!=v.end(); ++it) UKSW, WMP. SNS, Warszawa 117 template<class InputIterator1, class InputIterator2, class OutputIterator> OutputIterator set_intersection( InputIterator2 _First2, InputIterator2 _Last2, łączy wszystkie elementy, które należą do obydwu posortowanych przedziałów w jeden wspólny posortowany przedział wynikowy (przecięcie zbiorów) dwa elementy a i b są uważane za równe, jeżeli: (!(a<b) &&!(b<a)), 118 #include <algorithm> // std::set_intersection, std::sort int first[] = {5,10,15,20,25; int second[] = {50,40,30,20,10; std::vector<int> v(10); // std::vector<int>::iterator it; std::sort (first,first+5); // std::sort (second,second+5); // it=std::set_intersection (first, first+5, second, second+5, v.begin()); // v.resize(it-v.begin()); // std::cout << "Czesc wspolna ma " << (v.size()) << " elementów:\n"; for (it=v.begin(); it!=v.end(); ++it) UKSW, WMP. SNS, Warszawa 119 5

6 template<class InputIterator1, class InputIterator2, class OutputIterator> OutputIterator set_difference( InputIterator2 _First2, InputIterator2 _Last2, łączy wszystkie elementy, które należą do pierwszego, ale nie do drugiego z przedziałów (obydwa muszą być posortowane) w jeden posortowany przedział wynikowy (różnica zbiorów) dwa elementy a i b są uważane za równe, jeżeli: (!(a<b) &&!(b<a)), 120 #include <algorithm> // std::set_difference, std::sort int first[] = {5,10,15,20,25; int second[] = {50,40,30,20,10; std::vector<int> v(10); // std::vector<int>::iterator it; std::sort (first,first+5); // std::sort (second,second+5); // it=std::set_difference (first, first+5, second, second+5, v.begin()); // v.resize(it-v.begin()); // std::cout << "Roznica ma " << (v.size()) << " elementów:\n"; for (it=v.begin(); it!=v.end(); ++it) UKSW, WMP. SNS, Warszawa 121 template<class InputIterator1, class InputIterator2, class OutputIterator> OutputIterator set_symmetric_difference( InputIterator2 _First2, InputIterator2 _Last2, łączy wszystkie elementy, które należą albo do jednego, albo do drugiego z przedziałów (obydwa muszą być posortowane) w jeden posortowany przedział wynikowy (różnica symetryczna zbiorów) dwa elementy a i b są uważane za równe, jeżeli: (!(a<b) &&!(b<a)), 122 #include <algorithm> // std::set_symmetric_difference, std::sort int first[] = {5,10,15,20,25; int second[] = {50,40,30,20,10; std::vector<int> v(10); // std::vector<int>::iterator it; std::sort (first,first+5); // std::sort (second,second+5); // it=std::set_symmetric_difference(first,first+5,second,second+5,v.begin()); // v.resize(it-v.begin()); // std::cout << "Roznica symetr. ma " << (v.size()) << " elementów:\n"; for (it=v.begin(); it!=v.end(); ++it) UKSW, WMP. SNS, Warszawa 123 template<class InputIterator1, class InputIterator2> bool lexicographical_compare( InputIterator2 _First2, InputIterator2 _Last2 ); porównuje dwa przedziały element po elemencie aby wskazać ten mniejszy. Zwraca true, jeżeli pierwszy jest leksykograficznie mniejszy, lub false wpp, 124, std::boolalpha #include <algorithm> // std::lexicographical_compare #include <cctype> // std::tolower bool porownaj(char c1, char c2) { return std::tolower(c1)<std::tolower(c2); ; char V1[]="Apple"; char V2[]="apartment"; std::cout << std::boolalpha; std::cout << "Porownuje V1 i V2 leksykograficznie (V1<V2):\n"; std::cout << "Operator domyślny (<): "; std::cout << std::lexicographical_compare(v1,v1+5,v2,v2+9); std::cout << "Operator porownaj: "; std::cout << std::lexicographical_compare(v1,v1+5,v2,v2+9,porownaj); 125 6

7 template <class BidirectionalIterator> bool next_permutation (BidirectionalIterator first, BidirectionalIterator last); zmienia porządek elementów w sekwencji [first, last) na następną, leksykograficznie większą permutację, Za pierwszą permutację przyjmujemy sekwencję posortowaną rosnąco. Za ostatnią malejąco. Zwraca true, jeżeli istnieje możliwość dokonania kolejnej permutacji i wykonuje ją. W przeciwnym przypadku, tj. kiedy osiągnięto już ostatnią permutację, zmienia prządek na pierwszą permutację i zwraca false. #include <iostream> #include <algorithm> int myints[] = {1,2,3; std::sort (myints,myints+3); // std::cout // std::next_permutation, std::sort // ustawiamy początkową permutację std::cout << "The 3! possible permutations with 3 elements:\n"; do { std::cout << myints[0] << ' ' << myints[1] << ' ' << myints[2] << '\n'; while ( std::next_permutation(myints,myints+3) ); std::cout << "After loop: " << myints[0] << ' ' << myints[1] << ' ' << myints[2] << '\n'; Podsumowanie 1. partition 2. stable_partition 3. sort 4. stable_sort 5. partial_sort 6. partial_sort_copy 7. nth_element 8. lower_bound 9. upper_bound 10.equal_range 11.binary_search 12.merge 13.inplace_merge 14.includes 15.set_union 16.set_intersection 17.set_difference 18.set_symmetric_difference 19.lexicographical_compare 20.next_permutation accumulate 2. partial_sum 3. inner_product 4. adjacent_difference 129 template<class InputIterator, class Type> Type accumulate( InputIterator _First, InputIterator _Last, Type _Val ); sumuje wartości zawarte w sekwencji [_First,_Last) do wartości początkowej sumy zawartej w _Val. Zwraca wynik sumowania. chociaż domyślną operacją jest sumowanie, istnieje wersja z dodatkowym, ostatnim argumentem szablonu reprezentującym funkcję lub obiekt funkcyjny służący do wykonywania dowolnych innych operacji. #include <functional> // std::minus #include <numeric> // std::accumulate int init = 100; int numbers[] = {10,20,30; std::cout << "Domyślna suma: "; std::cout << std::accumulate(numbers,numbers+3,init); // Domyślna suma: 160 std::cout << "Minus z biblioteki <functional>: "; std::cout << std::accumulate (numbers, numbers+3, init, std::minus<int>()); // Minus z biblioteki <functional>:

8 #include <functional> // std::minus #include <numeric> // std::accumulate int MojaFun (int x, int y) {return x+2*y; struct MojaKlasa { int operator()(int x, int y) {return x+3*y; MObj; int init = 100; int numbers[] = {10,20,30; std::cout << "MojaFun: "; std::cout << std::accumulate (numbers, numbers+3, init, MojaFun); // MojaFun: 220 std::cout << "MObj : "; std::cout << std::accumulate (numbers, numbers+3, init, MObj); // Mobj: template<class InputIterator, class OutIt> OutputIterator partial_sum( InputIterator _First, InputIterator _Last, oblicza uogólnioną sumę częściową zbioru elementów z sekwencji [_First,_Last). Polega to na utworzeniu sekwencji wynikowej, której pierwszy element jest wskazywany przez _Result, zawierającej wartości będące sumą elementów poprzedzających każdą z tych wartości w sekwencji wejściowej. np. dla sekwencji wejściowej 1,2,3,4,5 sumy w sekwencji wynikowej będą miały wartości: 1, 1+2, 1+2+3, , chociaż domyślną operacją jest sumowanie istnieje wersja z dodatkowym, ostatnim argumentem szablonu reprezentującym funkcję lub obiekt funkcyjny służący do wykonywania dowolnych innych operacji. 133 #include <functional> // std::multiplies #include <numeric> // std::partial_sum int myop (int x, int y) {return x+y+1; int val[] = {1,2,3,4,5; int result[5]; std::partial_sum (val, val+5, result, std::multiplies<int>()); std::cout << "using functional operation multiplies: "; for (int i=0; i<5; i++) std::cout << result[i] << ' '; std::partial_sum (val, val+5, result, myop); std::cout << "using custom function: "; for (int i=0; i<5; i++) std::cout << result[i] << ' '; template<class InputIterator1, class InputIterator2, class Type> Type inner_product( InputIterator2 _First2, Type _Val ); oblicza iloczyn stanowiący odpowiednik iloczynu skalarnego dwóch wektorów reprezentowanych sekwencjami [_First1,_Last1) i _First2. Wartością takiej operacji jest suma iloczynów odpowiadających sobie elementów sekwencji powiększona o wartość bazową _Val: _Val + (*_First1) * (*_First2) +.. Dwie domyślne operacje mnożenia oraz dodawania wyniku wszystkich par do wartości bazowej można zastąpić dwoma funkcjami lub obiektami funkcyjnymi, odpowiednio op2 i op #include <functional> // std::minus, std::divides #include <numeric> // std::inner_product int myaccumulator (int x, int y) {return x-y; int myproduct (int x, int y) {return x+y; int init = 100; int series1[] = {10,20,30; int series2[] = {1,2,3; std::cout << "using functional operations: "; std::cout << std::inner_product(series1,series1+3,series2,init, std::minus<int>(),std::divides<int>()); std::cout << "using custom functions: "; std::cout << std::inner_product(series1,series1+3,series2,init, myaccumulator,myproduct); 136 template<class InputIterator, class OutIterator> OutputIterator adjacent_difference( InputIterator _First, InputIterator _Last, oblicza różnicę sąsiadujących elementów sekwencji źródłowej. Np. dla sekwencji 1,2,3,4,5 sekwencja wynikowa reprezentuje wartości: 1, 2-1, 3-2, 4-3, 5-4, domyśla operacja odejmowania można zastąpić funkcją lub obiektem funkcyjnym

9 #include <functional> // std::multiplies #include <numeric> // std::adjacent_difference int myop (int x, int y) {return x+y; int val[] = {1,2,3,5,9,11,12; int result[7]; std::adjacent_difference (val, val+7, result, std::multiplies<int>()); std::cout << "using functional operation multiplies: "; for (int i=0; i<7; i++) std::cout << result[i] << ' '; std::adjacent_difference (val, val+7, result, myop); std::cout << "using custom function: "; for (int i=0; i<7; i++) std::cout << result[i] << ' '; Ogólna konwencja dotycząca parametrów algorytmów: alg(beg, end, other args); alg(beg, end, dest, other args); alg(beg, end, beg2, other args); alg(beg, end, beg2, end2, other args); beg, end zakres pierwszego zbioru przechowującego dane wejściowe, na których działa algorytm alg dest iterator wskazujący miejsce, gdzie ma być zapisany wynik działania algorytmu alg. Algorytm zakłada, że miejsce to jest bezpieczne, tj. np. dostatecznie duże (nie wykonuje kroku weryfikacji). beg2, end2 zakres drugiego zbioru przechowującego dane wejściowe; algorytmy, korzystające tylko z beg2 zakładają, że liczba elementów drugiej sekwencji jest co najmniej tak duża jak zakres beg, end Ogólna konwencja dotycząca parametrów algorytmów: Algorytmy używające predykatów występują w dwóch wersjach, np.: 1. unique(beg, end); // używa == do porównywania 2. unique(beg, end, comp); // używa comp do porównywania Pierwsza używa przeciążonego operatora logicznego < lub == zdefiniowanego dla typu danych przechowywanych w kontenerze. Druga używa obiektu funkcyjnego, tj. predykatu comp Ogólna konwencja dotycząca parametrów algorytmów: Algorytmy mające w nazwie if występują w dwóch wersjach, np.: 1. find(beg, end, val); // znajduje pierwsze wystąpienie val 2. find_if(beg, end, pred); // znajduje pierwszą wartość, // gdzie pred==true Algorytmy mające w nazwie _copy występują w dwóch wersjach, np.: 1. reverse(beg, end); // odwraca porządek elementów 2. reverse_copy(beg, end, dest); // kopiuje w odwrotnym // porządku do dest Algorytmy kontenera list: W przeciwieństwie do innych kontenerów, kontener list definiuje kilka algorytmów jako swoje własne metody. Np. dla obiektu lst można wywołać: lst.merge(lst2); // używa operatora < lst.merge(lst2, comp); // używa comp lst.remove(val); // używa operatora == lst.remove_if(pred); // używa pred lst.reverse(); lst.sort(); // używa operatora < lst.sort(comp); // używa comp lst.unique(); // używa operatora == lst.unique(pred); // używa pred 142 Algorytmy kontenera list: Algorytm splice może wystąpić z różnymi listami argumentów, np. dla lst.splice : 1. (p, lst2), gdzie p iterator na element w lst. Przenosi elementy z kontenera lst2 do lst tuż przed p usuwając je z lst2 (lst i lst2 nie mogą być tym samym kontenerem i muszą być tego samego typu), 2. (p, lst2, p2), gdzie p iterator na element w lst, a p iterator na element w lst2. Przenosi element p2 do lst w miejsce tuż przed p. (lst i lst2 mogą być tym samym kontenerem), 3. (p, lst2, b, e), gdzie p iterator na element w lst, a b i e określają przedział w kontenerze lst2. Przenosi elementy z przedziału do lst w miejsce tuż przed p. (lst i lst2 mogą być tym samym kontenerem, ale p nie może należeć do przedziału b,e)

10 Algorytmy kontenera list: Algorytmy zadeklarowane jako metody są szybsze od algorytmów generycznych: algorytmy generyczne zamieniają przechowywane wartości, algorytmy zadeklarowane jako metody działają na wskaźnikach reprezentujących linki między elementami kontenera. C++: STL Implementowanie własnych algorytmów 144 STL: implementowanie algorytmów Algorytm przeszukiwania w głąb Przeszukiwanie grafu odwiedzenie wszystkich jego wierzchołków w kolejności jak na rysunku obok: Reprezentacja grafu w programie Wierzchołki są identyfikowane przez liczby całkowite. Dla każdego z wierzchołków przechowujemy listy numerów wierzchołków, z którymi jest połączony krawędzią: vector< vector<int> > 146 STL: implementowanie algorytmów Algorytm przeszukiwania w głąb typedef vector<int> vi; typedef vector<vi> vvi; int N; // liczba wierzchołków vvi W; // graf vi V; // V zawiera flagi określające, czy wierzchołek został odwiedzony void dfs(int i) { if(!v[i]) { V[i] = true; // zaznaczamy węzeł jako odwiedzony for_each(w[i].begin(), W[i].end(), dfs); // rekurencyjne wywołanie bool check_graph_connected_dfs() { int start_vertex = 0; V = vi(n, false); dfs(start_vertex); return (find(v.begin(), V.end(), 0) == V.end());

STL: algorytmy sortujące. STL: algorytmy sortujące. STL: algorytmy sortujące. STL: algorytmy sortujące. STL: algorytmy sortujące

STL: algorytmy sortujące. STL: algorytmy sortujące. STL: algorytmy sortujące. STL: algorytmy sortujące. STL: algorytmy sortujące 1. partition 2. stable_partition 3. sort 4. stable_sort 5. partial_sort 6. partial_sort_copy 7. nth_element 8. lower_bound 9. upper_bound 10.equal_range 11.binary_search 12.merge 13.inplace_merge 14.includes

Bardziej szczegółowo

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

STL: implementowanie algorytmów C++: STL. STL: implementowanie algorytmów. STL: implementowanie algorytmów. STL: implementowanie algorytmów Algorytm przeszukiwania w głąb Przeszukiwanie grafu odwiedzenie wszystkich jego wierzchołków w kolejności jak na rysunku obok: C++: STL Implementowanie własnych algorytmów Reprezentacja grafu w programie

Bardziej szczegółowo

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

STL: kontenery. STL: kontenery. STL: kontenery. Typy kontenerów STL. STL: kontenery. STL: kontenery. multimap. Kontener map: przykład zadanie: Kontener map: przykład zadanie: Jak policzyć liczby różnych słów występujących w tekście? Rozwiązanie: Potrzebny jest kontener, który będzie zawierał listę różnych słów (tj. listę bez powtórzeń), która

Bardziej szczegółowo

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

STL: kontenery C++: STL: kontenery. STL: kontenery. STL: kontenery. STL: kontenery. Fabryka obiektów. Fabryka obiektów Fabryka obiektów C++: Fabryka obiektów Klasa, której obiekty pośrednicza przy tworzeniu innych obiektów. Pomagają tworzyć obiekty, jeżeli informacja o typie odnosi się do konkretnego typu, znanego w momencie

Bardziej szczegół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

Algorytmy, iteratory, kolekcje niestandardowe

Algorytmy, iteratory, kolekcje niestandardowe Algorytmy, iteratory, kolekcje niestandardowe Biblioteka STL Sebastian Deorowicz Politechnika Śląska 2006 11 06 Sebastian Deorowicz (PŚl) Algorytmy, iteratory, kolekcje niestandardowe 2006 11 06 1 / 83

Bardziej szczegółowo

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

STL: implementowanie algorytmów. STL: implementowanie algorytmów. STL: implementowanie algorytmów. STL: implementowanie algorytmów Algorytm przeszukiwania wszerz Przeszukiwanie grafu odwiedzenie wszystkich jego wierzchołków w kolejności jak na rysunku obok: Reprezentacja grafu w programie Wierzchołki są identyfikowane przez liczby

Bardziej szczegółowo

Wstęp do programowania obiektowego. STL - Standard Template Library

Wstęp do programowania obiektowego. STL - Standard Template Library Wstęp do programowania obiektowego STL - Standard Template Library 1 STL z ang. Standard Template Library, (pol. standardowa biblioteka szablonów) biblioteka C++ zawierająca pojemniki, iteratory, algorytmy,

Bardziej szczegółowo

Algorytmy i Struktury Danych. Anna Paszyńska

Algorytmy i Struktury Danych. Anna Paszyńska Algorytmy i Struktury Danych Anna Paszyńska Tablica dynamiczna szablon Array Zbiory Zbiory template class Container {public: virtual ~Container() { }; virtual int Count() const = 0;

Bardziej szczegółowo

Programowanie i struktury danych

Programowanie i struktury danych Programowanie i struktury danych 1 / 30 STL Standard Template Library, STL (ang. = Standardowa Biblioteka Wzorców) biblioteka C++ zawierająca szablony (wzorce), które umożliwiają wielokrotne użycie. Główne

Bardziej szczegółowo

STL: kontenery. Typy kontenerów STL. STL: kontenery. STL: kontenery. STL: kontenery. Typy kontenerów STL. deque (double-ended queue) list

STL: kontenery. Typy kontenerów STL. STL: kontenery. STL: kontenery. STL: kontenery. Typy kontenerów STL. deque (double-ended queue) list Kontenery sekwencyjne: deque (kolejka dwustronna) deque (double-ended queue) implementacja kontenera zoptymalizowana pod kątem efektywności operacji dołączania i usuwania elementów z sekwencji na obu jej

Bardziej szczegółowo

Programowanie współbieżne i rozproszone

Programowanie współbieżne i rozproszone Programowanie współbieżne i rozproszone WYKŁAD 5 Jan Kazimirski 1 Programowanie GPU 2/2 2 Thrust Język CUDA C bazuje na języku C języku o dosyć niskim poziomie abstrakcji ( macro assembler) Implementowanie

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

obiekty funkcyjne - funktory

obiekty funkcyjne - funktory #include #include #include #include #include #include #include #include #include #include using namespace

Bardziej szczegółowo

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

Programowanie Obiektowo Zorientowane w języku C++ Biblioteka STL Programowanie Obiektowo Zorientowane w języku C++ Biblioteka STL Mirosław Głowacki 1 1 Akademia Górniczo-Hutnicza im. Stanisława Staszica w Ktrakowie Wydział Inżynierii Metali i Informatyki Stosowanej

Bardziej szczegół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

Wydajność użycia funktorów z biblioteką STL języka C++

Wydajność użycia funktorów z biblioteką STL języka C++ Wydajność użycia funktorów z biblioteką STL języka C++ Irek Szcześniak, Maciek Sobczak 1 października 2005 roku Streszczenie Artykuł dotyczy wydajności użycia funktorów z biblioteką STL (Standard Template

Bardziej szczegółowo

Algorytmy sortujące i wyszukujące

Algorytmy sortujące i wyszukujące Algorytmy sortujące i wyszukujące Zadaniem algorytmów sortujących jest ułożenie elementów danego zbioru w ściśle określonej kolejności. Najczęściej wykorzystywany jest porządek numeryczny lub leksykograficzny.

Bardziej szczegółowo

Paradygmaty programowania

Paradygmaty programowania Paradygmaty programowania Programowanie generyczne w C++ Dr inż. Andrzej Grosser Cz estochowa, 2016 2 Spis treści 1. Zadanie 3 5 1.1. Wprowadzenie.................................. 5 1.2. Obiekty funkcyjne................................

Bardziej szczegół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 int getmax (int a, int b) { return (a > b? a : b); float getmax (float a, float b) { return (a > b? a : b); long getmax (long a, long b)

Bardziej szczegółowo

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

Programowanie w C++ Wykład 7. Katarzyna Grzelak. 23 kwietnia K.Grzelak (Wykład 7) Programowanie w C++ 1 / 40 Programowanie w C++ Wykład 7 Katarzyna Grzelak 23 kwietnia 2018 K.Grzelak (Wykład 7) Programowanie w C++ 1 / 40 Standard Template Library (STL) K.Grzelak (Wykład 7) Programowanie w C++ 2 / 40 C++ Templates

Bardziej szczegółowo

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

Programowanie w C++ Wykład 6. Katarzyna Grzelak. 1 kwietnia K.Grzelak (Wykład 6) Programowanie w C++ 1 / 43 Programowanie w C++ Wykład 6 Katarzyna Grzelak 1 kwietnia 2019 K.Grzelak (Wykład 6) Programowanie w C++ 1 / 43 Pojęcia z poprzednich wykładów Tablica to ciag obiektów tego samego typu, zajmujacy ciagły

Bardziej szczegółowo

Standard C++0x (C++1x?) Marcin Świderski

Standard C++0x (C++1x?) Marcin Świderski Standard C++0x (C++1x?) Marcin Świderski sfider@students.mimuw.edu.pl O czym będzie mowa? Wytyczne komitetu standaryzacyjnego Rozszerzenia języka Rozszerzenia języka szablony Rozszerzenia biblioteki standardowej

Bardziej szczegółowo

Podstawowe algorytmy i ich implementacje w C. Wykład 9

Podstawowe algorytmy i ich implementacje w C. Wykład 9 Wstęp do programowania 1 Podstawowe algorytmy i ich implementacje w C Bożena Woźna-Szcześniak bwozna@gmail.com Jan Długosz University, Poland Wykład 9 Element minimalny i maksymalny zbioru Element minimalny

Bardziej szczegółowo

Kontenery i iteratory. Wykorzystanie kontenerów w praktyce.

Kontenery i iteratory. Wykorzystanie kontenerów w praktyce. Instrukcja laboratoryjna nr 2 Programowanie w języku C 2 (C++ poziom zaawansowany) Kontenery i iteratory. Wykorzystanie kontenerów w praktyce. dr inż. Jacek Wilk-Jakubowski mgr inż. Maciej Lasota dr inż.

Bardziej szczegółowo

Algorytmy i Struktury Danych, 2. ćwiczenia

Algorytmy i Struktury Danych, 2. ćwiczenia Algorytmy i Struktury Danych, 2. ćwiczenia 2017-10-13 Spis treści 1 Optymalne sortowanie 5 ciu elementów 1 2 Sortowanie metodą Shella 2 3 Przesunięcie cykliczne tablicy 3 4 Scalanie w miejscu dla ciągów

Bardziej szczegółowo

Zaawansowane programowanie w C++ (PCP)

Zaawansowane programowanie w C++ (PCP) Zaawansowane programowanie w C++ (PCP) Wykład 6 - szablony. dr inż. Robert Nowak - p. 1/15 Kolekcje i algorytmy» Deklaracja szablonu y Pojęcia niezależne od typu: kolekcje (np. listy) algorytmy (np. znajdowania

Bardziej szczegółowo

funkcje rekurencyjne Wykład 12. Podstawy programowania (język C) Funkcje rekurencyjne (1) Funkcje rekurencyjne (2)

funkcje rekurencyjne Wykład 12. Podstawy programowania (język C) Funkcje rekurencyjne (1) Funkcje rekurencyjne (2) Podstawy programowania (język C) funkcje rekurencyjne Wykład 12. Tomasz Marks - Wydział MiNI PW -1- Tomasz Marks - Wydział MiNI PW -2- Funkcje rekurencyjne (1) W języku C funkcja moŝe wywoływać samą siebie.

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

Programowanie w VB Proste algorytmy sortowania

Programowanie w VB Proste algorytmy sortowania Programowanie w VB Proste algorytmy sortowania Sortowanie bąbelkowe Algorytm sortowania bąbelkowego polega na porównywaniu par elementów leżących obok siebie i, jeśli jest to potrzebne, zmienianiu ich

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

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

C++ - przeciążanie operatorów. C++ - przeciążanie operatorów. C++ - przeciążanie operatorów. C++ - przeciążanie operatorów Operatory są elementami języka C++. Istnieje zasada, że z elementami języka, takimi jak np. słowa kluczowe, nie można dokonywać żadnych zmian, przeciążeń, itp. PRZECIĄŻANIE OPERATORÓW Ale dla operatorów

Bardziej szczegółowo

STL: Lekcja 1&2. Filozofia STL

STL: Lekcja 1&2. Filozofia STL STL: Lekcja 1&2 Tematy: Filozofia STL Po co nam STL? Podstawowa zawartość STL Co warto znać zanim zaczniemy pracę z STL?: wskaźniki Praca na tekstach: klasa String Vector: nowy wymiar standardowych tablic.

Bardziej szczegółowo

STL: kontenery. STL: kontenery. STL: kontenery. STL: kontenery. STL: kontenery. STL: kontenery

STL: kontenery. STL: kontenery. STL: kontenery. STL: kontenery. STL: kontenery. STL: kontenery Kontenery sekwencyjne: list (lista dwukierunkowa) jest przystosowany do szybkiego wstawiania elementów w dowolne miejsce sekwencji, nie nadaje się do efektywnej realizacji operacji swobodnego dostępu,

Bardziej szczegół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

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

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 obiektowe - Przykładowe zadania egzaminacyjne (2005/2006)

Programowanie obiektowe - Przykładowe zadania egzaminacyjne (2005/2006) Programowanie obiektowe - Przykładowe zadania egzaminacyjne (2005/2006) Część 1. Teoria Wyjaśnij pojęcia, podaj przykład: klasa obiekt konstruktor destruktor kapsułkowanie (hermetyzacja) wskaźnik this

Bardziej szczegółowo

Szablony klas, zastosowanie szablonów w programach

Szablony klas, zastosowanie szablonów w programach Szablony klas, zastosowanie szablonów w programach 1. Szablony klas i funkcji 2. Szablon klasy obsługującej uniwersalną tablicę wskaźników 3. Zastosowanie metody zwracającej przez return referencję do

Bardziej szczegół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

Tablice mgr Tomasz Xięski, Instytut Informatyki, Uniwersytet Śląski Katowice, 2011

Tablice mgr Tomasz Xięski, Instytut Informatyki, Uniwersytet Śląski Katowice, 2011 Tablice mgr Tomasz Xięski, Instytut Informatyki, Uniwersytet Śląski Katowice, 2011 Załóżmy, że uprawiamy jogging i chcemy monitorować swoje postępy. W tym celu napiszemy program, który zlicza, ile czasu

Bardziej szczegółowo

Wykład 1_2 Algorytmy sortowania tablic Sortowanie bąbelkowe

Wykład 1_2 Algorytmy sortowania tablic Sortowanie bąbelkowe I. Struktury sterujące.bezpośrednie następstwo (A,B-czynności) Wykład _2 Algorytmy sortowania tablic Sortowanie bąbelkowe Elementy języka stosowanego do opisu algorytmu Elementy Poziom koncepcji Poziom

Bardziej szczegółowo

Algorytmy i złożoności. Wykład 3. Listy jednokierunkowe

Algorytmy i złożoności. Wykład 3. Listy jednokierunkowe Algorytmy i złożoności Wykład 3. Listy jednokierunkowe Wstęp. Lista jednokierunkowa jest strukturą pozwalającą na pamiętanie danych w postaci uporzadkowanej, a także na bardzo szybkie wstawianie i usuwanie

Bardziej szczegółowo

Przeciążenie operatorów

Przeciążenie operatorów Przeciążenie operatorów W C++ można przeciążyć większość operatory tak, żeby wykonywali zadania, charakterystyczne dla danej klasy Po przeciążeniu odpowiednich operatorów można posługiwać się obiektami

Bardziej szczegółowo

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

C++ Przeładowanie operatorów i wzorce w klasach C++ i wzorce w klasach Andrzej Przybyszewski numer albumu: 89810 14 listopada 2009 Ogólnie Przeładowanie (przeciążanie) operatorów polega na nadaniu im nowych funkcji. Przeładowanie operatora dokonuje

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 klas (templates)

Szablony funkcji i klas (templates) Instrukcja laboratoryjna nr 3 Programowanie w języku C 2 (C++ poziom zaawansowany) Szablony funkcji i klas (templates) dr inż. Jacek Wilk-Jakubowski mgr inż. Maciej Lasota dr inż. Tomasz Kaczmarek Wstęp

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

Informacje wstępne #include <nazwa> - derektywa procesora umożliwiająca włączenie do programu pliku o podanej nazwie. Typy danych: char, signed char

Informacje wstępne #include <nazwa> - derektywa procesora umożliwiająca włączenie do programu pliku o podanej nazwie. Typy danych: char, signed char Programowanie C++ Informacje wstępne #include - derektywa procesora umożliwiająca włączenie do programu pliku o podanej nazwie. Typy danych: char, signed char = -128 do 127, unsigned char = od

Bardziej szczegół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

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

Podstawy języka C++ Maciej Trzebiński. Instytut Fizyki Jądrowej Polskiej Akademii Nauk. Praktyki studenckie na LHC IVedycja,2016r. M. Trzebiński C++ 1/14 Podstawy języka C++ Maciej Trzebiński Instytut Fizyki Jądrowej Polskiej Akademii Nauk Praktyki studenckie na LHC IVedycja,2016r. IFJ PAN Przygotowanie środowiska pracy Niniejsza

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

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

Kiedy potrzebne. Struktura (rekord) Struktura w języku C# Tablice struktur. struktura, kolekcja

Kiedy potrzebne. Struktura (rekord) Struktura w języku C# Tablice struktur. struktura, kolekcja 1 struktura, kolekcja Kiedy potrzebne Duża liczba danych takiego samego typu tablice a jak nieznana liczba elementów? dane zawierające wartości różnego typu (osoba: pesel, nazwisko, rok urodzenia, pracuje/niepracuje,

Bardziej szczegółowo

Funkcje. Deklaracja funkcji. Definicja funkcji. Wykorzystanie funkcji w programie.

Funkcje. Deklaracja funkcji. Definicja funkcji. Wykorzystanie funkcji w programie. Funkcje Deklaracja funkcji typ funkcji identyfikator_funkcji(lista parametrów formalnych); Typ funkcji określa typ wartości zwracanej przez funkcję (typ zdefiniowany pierwotnie jak int, typ zdefiniowany

Bardziej szczegółowo

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

Techniki programowania INP001002Wl rok akademicki 2018/19 semestr letni. Wykład 5. Karol Tarnowski A-1 p. Techniki programowania INP001002Wl rok akademicki 2018/19 semestr letni Wykład 5 Karol Tarnowski karol.tarnowski@pwr.edu.pl A-1 p. 411B Plan prezentacji Przestrzenie nazw Standardowa biblioteka szablonów

Bardziej szczegółowo

Paradygmaty programowania

Paradygmaty programowania Paradygmaty programowania Programowanie generyczne w C++ Dr inż. Andrzej Grosser Cz estochowa, 2014 2 Spis treści 1. Zadanie 4 5 1.1. Wprowadzenie.................................. 5 1.2. Wskazówki do

Bardziej szczegół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

Definicja. Ciąg wejściowy: Funkcja uporządkowująca: Sortowanie polega na: a 1, a 2,, a n-1, a n. f(a 1 ) f(a 2 ) f(a n )

Definicja. Ciąg wejściowy: Funkcja uporządkowująca: Sortowanie polega na: a 1, a 2,, a n-1, a n. f(a 1 ) f(a 2 ) f(a n ) SORTOWANIE 1 SORTOWANIE Proces ustawiania zbioru elementów w określonym porządku. Stosuje się w celu ułatwienia późniejszego wyszukiwania elementów sortowanego zbioru. 2 Definicja Ciąg wejściowy: a 1,

Bardziej szczegółowo

KOLEJKA (QUEUE) (lista fifo first in, first out)

KOLEJKA (QUEUE) (lista fifo first in, first out) KOLEJKA (QUEUE) (lista fifo first in, first out) Kolejki są listami, których elementy można wstawiać z jednego końca (rear-tył) a usuwać z drugiego (front - przód). Operacje: 1. MAKENULL(Q) czyni kolejkę

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

Języki programowania, wtorek , 12:15-13:45 Zadanie 11 - ostatnie

Języki programowania, wtorek , 12:15-13:45 Zadanie 11 - ostatnie Języki programowania, wtorek 10.01.2017, 12:15-13:45 Zadanie 11 - ostatnie Dzisiaj wykorzystamy kolejną bardzo ważną rzecz języka C++ - szablony funkcji i szablony klas. Wstęp co to są klasy i funkcje

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

Programowanie komputerowe. Zajęcia 1

Programowanie komputerowe. Zajęcia 1 Programowanie komputerowe Zajęcia 1 Code::Blocks - tworzenie projektu Create New Project Console Application -> C++ Wybierz nazwę projektu Stworzy się nowy projekt z wpisaną funkcją main Wpisz swój program

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

C++ - szablony kontenerów. Kontenery i szablony kontenerów. C++ - szablony kontenerów. C++ - szablony kontenerów. C++ - szablony kontenerów

C++ - szablony kontenerów. Kontenery i szablony kontenerów. C++ - szablony kontenerów. C++ - szablony kontenerów. C++ - szablony kontenerów Kontenery i szablony kontenerów Kontenery Kontener (lub inaczej pojemnik, ang. container, collection) to struktura danych, której zadaniem jest przechowywanie w zorganizowany sposób zbioru innych danych

Bardziej szczegółowo

Zestaw 1: Organizacja plików: Oddajemy tylko źródła programów (pliki o rozszerzeniach.adb i.ads)!!! Zad. 1: Zad. 2: 2,2,2 5,5,5,5,5,5 Zad.

Zestaw 1: Organizacja plików: Oddajemy tylko źródła programów (pliki o rozszerzeniach.adb i.ads)!!! Zad. 1: Zad. 2: 2,2,2 5,5,5,5,5,5 Zad. Zestaw 1: procedurę Wstaw wstawiającą do sznura podanego jako parametr element zawierający liczbę podaną jako parametr tak, aby sznur był uporządkowany niemalejąco (zakładając, że sznur wejściowy jest

Bardziej szczegółowo

Aby uzyskać zaliczenie w pierwszym terminie (do 30 stycznia 2018) rozliczyć trzeba co najmniej 8 projektów, po 4 z każdej z części: C++ oraz Python.

Aby uzyskać zaliczenie w pierwszym terminie (do 30 stycznia 2018) rozliczyć trzeba co najmniej 8 projektów, po 4 z każdej z części: C++ oraz Python. Aby uzyskać zaliczenie w pierwszym terminie (do 30 stycznia 2018) rozliczyć trzeba co najmniej 8 projektów, po 4 z każdej z części: C++ oraz Python. Pliki z rozwiązaniami projektu (wszystkie polecenia

Bardziej szczegółowo

C++ - klasy. C++ - klasy. C++ - klasy. C++ - klasy. C++ - klasy WSKAŹNIKI KLASOWE

C++ - klasy. C++ - klasy. C++ - klasy. C++ - klasy. C++ - klasy WSKAŹNIKI KLASOWE WSKAŹNIKI KLASOWE Wskaźniki klasowe Każdy obiekt zajmuje fragment pamięci i wszystkie obiekty tego samego typu zajmują fragmenty pamięci tej samej długości początek miejsca w pamięci zajmowanego przez

Bardziej szczegółowo

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

Definicja szablonu klasy. Korzystanie z szablonu. Specjalizacja metody szablonu. class Wektor private: Typ x; Typ y; Wektor(Typ a, Typ b) :x(a), y(b) ; Wektor A(2, 5); Wektor B(2.7, 9.7); Wektor C('A', 'B'); 1 Definicja szablonu klasy. Korzystanie z szablonu. class

Bardziej szczegółowo

Instrukcje sterujące. Programowanie Proceduralne 1

Instrukcje sterujące. Programowanie Proceduralne 1 Instrukcje sterujące Programowanie Proceduralne 1 Przypomnienie: operatory Operator przypisania = przypisanie x = y x y Operatory arytmetyczne * mnożenie x * y x y x / dzielenie x / y y + dodawanie x +

Bardziej szczegółowo

Szablon klasy std::vector

Szablon klasy std::vector Szablon klasy std::vector Bogdan Kreczmer ZPCiR IIAiR PWr pokój 307 budynek C3 bogdan.kreczmer@pwr.wroc.pl Copyright c 2006 2010 Bogdan Kreczmer Niniejszy dokument zawiera materiały do wykładu na temat

Bardziej szczegółowo

wykład II uzupełnienie notatek: dr Jerzy Białkowski Programowanie C/C++ Język C - funkcje, tablice i wskaźniki wykład II dr Jarosław Mederski Spis

wykład II uzupełnienie notatek: dr Jerzy Białkowski Programowanie C/C++ Język C - funkcje, tablice i wskaźniki wykład II dr Jarosław Mederski Spis i cz. 2 Programowanie uzupełnienie notatek: dr Jerzy Białkowski 1 i cz. 2 2 i cz. 2 3 Funkcje i cz. 2 typ nazwa ( lista-parametrów ) { deklaracje instrukcje } i cz. 2 typ nazwa ( lista-parametrów ) { deklaracje

Bardziej szczegółowo

Biblioteka standardowa C++

Biblioteka standardowa C++ 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 (sortowanie,

Bardziej szczegółowo

1. Napisz program wypisujący w kolejnych wierszach standardowego wyjścia pojedyncze słowa następującego napisu Bardzo dlugi napis. 2.

1. Napisz program wypisujący w kolejnych wierszach standardowego wyjścia pojedyncze słowa następującego napisu Bardzo dlugi napis. 2. 1. Napisz program wypisujący w kolejnych wierszach standardowego wyjścia pojedyncze słowa następującego napisu Bardzo dlugi napis. 2. Napisz program, który wczytuje ze standardowego wejścia liczbę całkowitą

Bardziej szczegółowo

Podstawy programowania. Wykład 7 Tablice wielowymiarowe, SOA, AOS, itp. Krzysztof Banaś Podstawy programowania 1

Podstawy programowania. Wykład 7 Tablice wielowymiarowe, SOA, AOS, itp. Krzysztof Banaś Podstawy programowania 1 Podstawy programowania. Wykład 7 Tablice wielowymiarowe, SOA, AOS, itp. Krzysztof Banaś Podstawy programowania 1 Tablice wielowymiarowe C umożliwia definiowanie tablic wielowymiarowych najczęściej stosowane

Bardziej szczegółowo

/* dołączenie pliku nagłówkowego zawierającego deklaracje symboli dla wykorzystywanego mikrokontrolera */ #include <aduc834.h>

/* dołączenie pliku nagłówkowego zawierającego deklaracje symboli dla wykorzystywanego mikrokontrolera */ #include <aduc834.h> Szablon programu: /* dołączenie pliku nagłówkowego zawierającego deklaracje symboli dla wykorzystywanego mikrokontrolera */ #include /* opcjonalne: deklaracja typów o rozmiarze jednego i dwóch

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

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

Programowanie C++ Wykład 2 - podstawy języka C++ dr inż. Jakub Możaryn. Warszawa, Instytut Automatyki i Robotyki Wykład 2 - podstawy języka C++ Instytut Automatyki i Robotyki Warszawa, 2014 Wstęp Plan wykładu Struktura programu. Zmienne i ich nazwy, podstawowe typy: całkowite, rzeczywiste, znakowe i napisowe. Instrukcje:

Bardziej szczegółowo

Typy złożone. Struktury, pola bitowe i unie. Programowanie Proceduralne 1

Typy złożone. Struktury, pola bitowe i unie. Programowanie Proceduralne 1 Typy złożone Struktury, pola bitowe i unie. Programowanie Proceduralne 1 Typy podstawowe Typy całkowite: char short int long Typy zmiennopozycyjne float double Modyfikatory : unsigned, signed Typ wskaźnikowy

Bardziej szczegółowo

Podstawy programowania w języku C

Podstawy programowania w języku C Podstawy programowania w języku C WYKŁAD 1 Proces tworzenia i uruchamiania programów Algorytm, program Algorytm przepis postępowania prowadzący do rozwiązania określonego zadania. Program zapis algorytmu

Bardziej szczegółowo

Programowanie - instrukcje sterujące

Programowanie - instrukcje sterujące Instytut Informatyki Uniwersytetu Śląskiego Laborki środowisko NetBeans, tworzenie nowego projektu; okno projekty; główne okno programu; package - budowanie paczek z klas; public class JavaApplication

Bardziej szczegółowo

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

Automatyczne tworzenie operatora = Integer2& operator=(const Integer& prawy) { zdefiniuje. Integer::operator=(ri); Przeciążanie operatorów [] Przykład: klasa reprezentująca typ tablicowy. Obiekt ma reprezentować tablicę, do której można się odwoływać intuicyjnie, np. Tab[i] Ma być też dostępnych kilka innych metod

Bardziej szczegół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

Języki programowania C i C++ Wykład: Typy zmiennych c.d. Operatory Funkcje. dr Artur Bartoszewski - Języki C i C++, sem.

Języki programowania C i C++ Wykład: Typy zmiennych c.d. Operatory Funkcje. dr Artur Bartoszewski - Języki C i C++, sem. Języki programowania C i C++ Wykład: Typy zmiennych c.d. Operatory Funkcje 1 dr Artur Bartoszewski - Języki C i C++, sem. 1I- WYKŁAD programowania w C++ Typy c.d. 2 Typy zmiennych Instrukcja typedef -

Bardziej szczegółowo

C++ wprowadzanie zmiennych

C++ wprowadzanie zmiennych C++ wprowadzanie zmiennych Każda zmienna musi być zadeklarowana, należy określić jej nazwę (identyfikator) oraz typ. Opis_typu lista zmiennych Dla każdej zmiennej rezerwowany jest fragment pamięci o określonym

Bardziej szczegółowo

KLASA UCZEN Uczen imię, nazwisko, średnia konstruktor konstruktor Ustaw Wyswietl Lepszy Promowany

KLASA UCZEN Uczen imię, nazwisko, średnia konstruktor konstruktor Ustaw Wyswietl Lepszy Promowany KLASA UCZEN Napisz deklarację klasy Uczen, w której przechowujemy następujące informacje o uczniu: imię, nazwisko, średnia (pola prywatne), poza tym klasa zawiera metody: konstruktor bezparametrowy (nie

Bardziej szczegółowo

utworz tworzącą w pamięci dynamicznej tablicę dwuwymiarową liczb rzeczywistych, a następnie zerującą jej wszystkie elementy,

utworz tworzącą w pamięci dynamicznej tablicę dwuwymiarową liczb rzeczywistych, a następnie zerującą jej wszystkie elementy, Lista 3 Zestaw I Zadanie 1. Zaprojektować i zaimplementować funkcje: utworz tworzącą w pamięci dynamicznej tablicę dwuwymiarową liczb rzeczywistych, a następnie zerującą jej wszystkie elementy, zapisz

Bardziej szczegół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

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

Podstawy programowania skrót z wykładów: Podstawy programowania skrót z wykładów: // komentarz jednowierszowy. /* */ komentarz wielowierszowy. # include dyrektywa preprocesora, załączająca biblioteki (pliki nagłówkowe). using namespace

Bardziej szczegół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

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

Kurs programowania. Wykład 1. Wojciech Macyna. 3 marca 2016 Wykład 1 3 marca 2016 Słowa kluczowe języka Java abstract, break, case, catch, class, const, continue, default, do, else, enum, extends, final, finally, for, goto, if, implements, import, instanceof, interface,

Bardziej szczegółowo

Język C++ wykład VIII

Język C++ wykład VIII Programowanie uzupełnienie notatek: dr Jerzy Białkowski 1 2 3 4 Obiektowość języka C++ ˆ Klasa (rozszerzenie struktury), obiekt instancją klasy, konstruktory i destruktory ˆ Enkapsulacja - kapsułkowanie,

Bardziej szczegół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

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

Języki Programowania. Prowadząca: dr inż. Hanna Zbroszczyk.   tel: Konsultacje: piątek: Języki Programowania Prowadząca: dr inż. Hanna Zbroszczyk e-mail: gos@if.pw.edu.pl tel: +48 22 234 58 51 Konsultacje: piątek: 12.00 13.30 www: http://www.if.pw.edu.pl/~gos/students/jp Politechnika Warszawska

Bardziej szczegółowo

Podstawy programowania. Wykład Funkcje. Krzysztof Banaś Podstawy programowania 1

Podstawy programowania. Wykład Funkcje. Krzysztof Banaś Podstawy programowania 1 Podstawy programowania. Wykład Funkcje Krzysztof Banaś Podstawy programowania 1 Programowanie proceduralne Pojęcie procedury (funkcji) programowanie proceduralne realizacja określonego zadania specyfikacja

Bardziej szczegółowo

Podstawy Programowania 1 Sortowanie tablic jednowymiarowych. Plan. Sortowanie. Sortowanie Rodzaje sortowania. Notatki. Notatki. Notatki.

Podstawy Programowania 1 Sortowanie tablic jednowymiarowych. Plan. Sortowanie. Sortowanie Rodzaje sortowania. Notatki. Notatki. Notatki. Podstawy Programowania 1 Sortowanie tablic jednowymiarowych Arkadiusz Chrobot Zakład Informatyki 12 listopada 20 1 / 35 Plan Sortowanie Wartość minimalna i maksymalna w posortowanej tablicy Zakończenie

Bardziej szczegółowo

Język C zajęcia nr 11. Funkcje

Język C zajęcia nr 11. Funkcje Język C zajęcia nr 11 Funkcje W języku C idea podprogramów realizowana jest wyłącznie poprzez definiowanie i wywołanie funkcji. Każda funkcja musi być przed wywołaniem zadeklarowana. Deklaracja funkcji

Bardziej szczegółowo

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

8. Wektory. Przykłady Napisz program, który pobierze od użytkownika 10 liczb, a następnie wypisze je w kolejności odwrotnej niż podana. 8. Wektory Przykłady 8.1. Napisz program, który pobierze od użytkownika 10 liczb, a następnie wypisze je w kolejności odwrotnej niż podana. Uwaga! Kod poniżej. To zadanie można rozwiązać przy użyciu wiedzy

Bardziej szczegółowo

Przeciążanie operatorów

Przeciążanie operatorów Instrukcja laboratoryjna nr 4 Programowanie w języku C 2 (C++ poziom zaawansowany) Przeciążanie operatorów dr inż. Wilk-Jakubowski Jacek mgr inż. Lasota Maciej dr inż. Kaczmarek Tomasz Wprowadzenie Oprócz

Bardziej szczegółowo