STL Standard Template Library
|
|
- Jolanta Kołodziejczyk
- 9 lat temu
- Przeglądów:
Transkrypt
1 ź ź 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 wi c tworzenie przeno nych programów STL zaprojektowano po to, by programi ci nie wymy lali ci gle prochu, koła, itp. STL niemal w cało ci opiera si na szablonach. STL realizuje paradygmat programowania ogólnego (generic programming), w którym operuje si na ogólnych klasach typów. STL czyni z j zyka C++ jako ciowo nowe narz dzie. STL nie ma nic wspólnego z programowaniem obiektowym. Podstawowe elementy STL: KONTENERY słu do przechowywania obiektów. Posiadaj standardowy interfejs poprzez który mo na manipulowa obiektami. Przykłady kontenerów: wektor, lista, kolejka, mapa, zbiór. ALGORYTMY: okre laj standardowe operacje wykonywane na zawarto- ci kontenerów lub obiektach. Niektóre algorytmy działaj na ka dym kontenerze, inne dostosowane s do konkretnych kontenerów. Posiadaj dobrze okre lone wła ciwo ci (np. czas wykonania). Przykłady: sortowanie, usuwanie, zliczanie, porównywanie, wyszukiwanie obiektów w kontenerze; ł czenie kontenerów. Permutacje, etc. ITERATORY: s uogólnieniem zwykłych wska ników. Stanowi podstawowy sposób uzyskiwania dost pu do elementów kontenera. Powszechnie u ywane do definiowania zakresu ( podkontenera ), na którym działaj algorytmy. Ka dy kontener mo na przeszuka stosuj c iterator (porz - dek liniowy). Istnieje kilka klas iteratorów: tylko-do-odczytu, tylko-doprzodu, tylko-do-tyłu, losowy-dost p, etc. Iteratory wszystkich kontenerów maj bardzo podobny (lub identyczny) interfejs, np.: o Iterator wskazuj cy pierwszy element kontenera uzyskuje si poprzez metod begin() kontenera, a metoda end() zwraca iterator wskazuj cy pierwszy element ZA ostatnim elementem kontenera. o Dost p do elementu kontenera wskazywanego przez iterator uzyskujemy poprzez operator wyłuskania (*). Lista koktajli #pragma warning( disable: 4786 ) // Bez powy szej dyrektywy program ten w VC generuje // multum ostrze e nr 4786, które le wiadcz o kompilatorze #include <string> int main () std::list<std::string> Koktaile; Koktaile.push_back("Czekoladowy"); Koktaile.push_back("Truskawkowy"); Koktaile.push_front("Cytrynowy"); Koktaile.push_front("Waniliowy"); Koktaile.push_front("Koktaile:"); Koktaile.push_back("*** Koniec Menu ***"); // dostep do elementow listy zapewnia iterator... // begin() zwraca iterator ustawiony na pierwszym elemencie // end() zwraca iterator ustawiony tuz za lista // operator++ przesuwa iterator do nastepnego elementu for ( std::list<std::string>::iterator // typ IteratorKoktaili = Koktaile.begin(); // obiekt IteratorKoktaili!= Koktaile.end(); // warunek ++IteratorKoktaili // inkrementacja ) // warto elementu listu wyłuskujemy (operator*) z iteratora std::cout << *IteratorKoktaili << std::endl; /* Output: Koktaile: Waniliowy Cytrynowy Czekoladowy Truskawkowy *** Koniec Menu *** */ 1 2
2 Algorytm ogólny for_each() #include <string> #include <algorithm> // Algorytmy ogolne (generic algorithms) using namespace std; // int Drukuj (string& napis) cout << napis << endl; eby móc pomin std:: int main (void) list<string> Owoce_i_Warzywa; Owoce_i_Warzywa.push_back("marchew"); Owoce_i_Warzywa.push_back("dynia"); Owoce_i_Warzywa.push_back("pomidor"); Owoce_i_Warzywa.push_front("jablko"); Owoce_i_Warzywa.push_front("ananas"); // pi kna instrukcja: for_each ( Owoce_i_Warzywa.begin(), Owoce_i_Warzywa.end(), Drukuj ); /* ananas jablko marchew dynia pomidor */ Dzi ki zastosowaniu for_each kod jest czystszy i czytelniejszy. for_each wymaga podania zakresu: K.begin()... K.end(). Dygresja: odczytywanie deklaracji szablonów funkcji i klas STL Oryginalny prototyp funkcji for_each: for_each template<class InIt, class Fun> Fun for_each(init first, InIt last, Fun f); The template function evaluates f(*(first + N)) once for each N in the range [0, last - first). It then returns f. The call f(*(first + N)) must not alter *(first + N). Widzimy, e for_each jest szablonem sparametryzowanym dwoma typami: InIt i Fun. o InIt oznacza Input_Iterator (iterator do odczytu) o Fun jest niemal dowoln funkcj : Z opisu dowiadujemy si bowiem, e Fun musi by funkcj przyjmuj c dokładnie jeden argument typu iterowanego przez InIt, która ponadto nie modyfikuje tego argumentu. Typ zwracany przez Fun jest dowolny. Kategorie iteratorów: Output (Out, OutIt): umo liwia zmian zawarto ci elementu kontenera; najcz ciej u ywany w strumieniach wyj cia. Operacje: *p=, ++ Input (In, InIt): umo liwia czytanie warto ci elementu kontenera. Operacje: =*p, ->, ++, ==,!=. Forward (For, FwdIt): Ma mo liwo ci iteratorów Input i Output. Przykład: lista wi zana pojedynczo. Operacje: =*p, *p=, ->, ++, ==,!=. Bidirectional (Bi, BidIt): Jak Forward, ale dwukierunkowy (++ i --). Przykład: lista podwójnie wi zana Operacje: =*p, *p=, ->, ++, --, ==,!=. Random Access (Ran, RanIt): Iterator o dost pie swobodnym. Przykład: tablica. Operacje: =*p, *p=, ->, [], ++, --, +N, -N, +=N. -=N, ==,!=, <, <= >, >=. 3 4
3 // Zliczamy ilo #include <algorithm> using namespace std; int main () list<int> Wyniki; Algorytm ogólny count pewnych elementów na li cie Wyniki.push_back(100); Wyniki.push_back(80); Wyniki.push_back(45); Wyniki.push_back(75); Wyniki.push_back(99); Wyniki.push_back(100); int ilesetek = count (Wyniki.begin(), Wyniki.end(), 100); cout << "wynik 100 punktow osiagnelo " << ilesetek<< " zawodnikow" << endl; /* OUTPUT: wynik 100 punktow osiagnelo 2 zawodnikow */ Algorytm count zwraca liczb wyst pie danego elementu w kontenerze. Algorytm for_each i obiekty funkcyjne ( function objects ) // Zliczamy elementy przy pomocy obiektu funkcyjnego #include <string> #include <algorithm> #include <iostream.h> using namespace std; const string KodSzczoteczki("0003"); // globalna stała // klasa obiektów funkcyjnych class CzyToJestSzczoteczka // koniecznie musimy zdefiniowac operator () bool operator() ( string& opistransakcji) return opistransakcji.substr(0,4) == KodSzczoteczki; ; // mniej trywialny obiekt funkcyjny posiada wewnetrzn pami! class CzyToJestSzczoteczka2 CzyToJestSzczoteczka2 (string& kod) : _kodporownawczy(kod) bool operator() (string& opistransakcji) return opistransakcji.substr(0,4) == _kodporownawczy; private: string _kodporownawczy; ; 5 6
4 int main (void) list<string> DziennikSprzedazy; DziennikSprzedazy.push_back("0001 Mydlo"); DziennikSprzedazy.push_back("0002 Szampon"); DziennikSprzedazy.push_back("0003 Szczoteczka"); DziennikSprzedazy.push_back("0004 Pasta"); DziennikSprzedazy.push_back("0003 Szczoteczka"); int iloscszczoteczek(0); iloscszczoteczek = count_if ( DziennikSprzedazy.begin(), DziennikSprzedazy.end(), CzyToJestSzczoteczka() //<-- konstruktor! ); cout << "metoda 1: Ilosc sprzedanych szczoteczek do zebow: " << iloscszczoteczek << endl; string ZmiennyKod = "0003"; iloscszczoteczek = count_if (DziennikSprzedazy.begin(), DziennikSprzedazy.end(), CzyToJestSzczoteczka2(ZmiennyKod) ); cout << "metoda 2: Ilosc sprzedanych szczoteczek do zebow: " << iloscszczoteczek << endl; /* OUTPUT: metoda 1: Ilosc sprzedanych szczoteczek do zebow: 2 metoda 2: Ilosc sprzedanych szczoteczek do zebow: 2 */ #include <string> #include <algorithm> using namespace std; Algorytm ogólny find int main (void) list<string> Owoce; list<string>::iterator IteratorOwocow; WYNIK: Gruszka Owoce.push_back("Jablko"); Owoce.push_back("Gruszka"); Owoce.push_back("Banan"); IteratorOwocow = find (Owoce.begin(), Owoce.end(), "Gruszka"); if (IteratorOwocow == Owoce.end()) cout << "Na liscie nie znaleziono poszukiwanego owocu\n"; else cout << *IteratorOwocow << endl; Algorytm ogólny find poszukuje w danym zakresie kontenera pierwsze wyst pienie danego elementu. Wynikiem jego działania jest iterator do pierwszego poszukiwanego elementu lub iterator wskazuj cy na pierwszy element poza zakresem. 7 8
5 ź Jak wykorzysta to, e algorytm find wymaga jedynie, by elementy kontenera mona było porównywa operatorem==? #include <string> #include <algorithm> class Owoc Owoc(char const* s) : _s(s) bool operator== (Owoc const& rhs) return rhs._s == _s (jablko() && rhs.jablko() ); std::string const& Nazwa() const return _s; private: bool jablko() const return _s == "Papierowka" _s == "Jablko"; const string _s; ; int main (void) list<owoc> Owoce; list<owoc>::iterator IteratorOwocow; Owoce.push_back("Gruszka"); Owoce.push_back("Papierowka"); Owoce.push_back("Jablko"); IteratorOwocow = find (Owoce.begin(), Owoce.end(), "Jablko"); if (IteratorOwocow == Owoce.end()) cout << "Na liscie nie znaleziono poszukiwanego owocu\n"; else cout << IteratorOwocow->Nazwa() << endl; WYNIK: Papierowka W ten sam sposób mo na zastosowa praktycznie dowolny algorytm ogólny do kontenerów obiektów klas zdefiniowanych przez u ytkownika Algorytm ogólny find_if #include <string, list, algorithm, iostream> using namespace std; struct ZdarzenieWRoku1997 bool operator () (string const& zdarzenie) // zapis roku rozpoczyna sie od znaku nr 12 i zajmuje 4 znaki return zdarzenie.substr(12,4)=="1997"; ; int main () list<string> Dziennik; Dziennik.push_back("07 stycznia 1995 Przygotowano szkic projektu domu"); Dziennik.push_back("07 lutego 1996 Przygotowano szczegółowy projekt domu"); Dziennik.push_back("13 stycznia 1997 Klient podpisuje umowe"); Dziennik.push_back("18 stycznia 1997 Rozpoczecie prac budowlanych"); Dziennik.push_back("30 kwietnia 1998 Zakonczenie prac"); for (list<string>::iterator Iterator = find_if (Dziennik.begin(), Dziennik.end(), ZdarzenieWRoku1997() ); Iterator!= Dziennik.end(); Iterator = find_if (Iterator, Dziennik.end(), ZdarzenieWRoku1997() ) ) cout << *Iterator++ << endl; WYNIK 13 stycznia 1997 Klient podpisuje umowe 18 stycznia 1997 Rozpoczecie prac budowlanych find_if działa jak find, tyle, e jako 3 argument przyjmuje predykat (obiekt funkcyjny lub funkcj zwracaj c warto typu bool) Iterator w powy szym przykładzie zachowuje si jak zwykły wska nik! Mo na na nim wykonywa operacje!=, ++, * 9 10
6 ź #include <string> #include <algorithm> using namespace std; int main () list<char> PoszukiwanyCiag; list<char> DanyCiagZnakow; PoszukiwanyCiag.push_back('\n'); PoszukiwanyCiag.push_back('\n'); DanyCiagZnakow.push_back('a'); DanyCiagZnakow.push_back('A'); DanyCiagZnakow.push_back('\n'); DanyCiagZnakow.push_back('\n'); DanyCiagZnakow.push_back('\n'); Algorytm ogólny search list<char>::iterator PozycjaPustegoWiersza = search(danyciagznakow.begin(), DanyCiagZnakow.end(), PoszukiwanyCiag.begin(), PoszukiwanyCiag.end()); if (PozycjaPustegoWiersza!= DanyCiagZnakow.end()) cout << "Znalazlem pusty wiersz!" << endl; search poszukuje w okre lonym ci gu wyst pienia danego podci gu i zwraca iterator do pierwszego elementu odpowiedniego podci gu w ci - gu lub do pierwszego elementu poza zakresem. Algorytm search z jawnym predykatem Problem: znale rz d #include <string, list, algorithm, iostream> #include <cctype> using namespace std; na li cie pierwsze wyst pienie dwóch cyfr pod bool porownaj(char c1, char c2) // to jest ten jawny predykat return isdigit(c1) && isdigit(c2); int main () list<char> DanyCiagZnakow; list<char> Ciag2Cyfry; Ciag2Cyfry.push_back('0'); Ciag2Cyfry.push_back('0'); DanyCiagZnakow.push_back('a'); DanyCiagZnakow.push_back('7'); DanyCiagZnakow.push_back('1'); DanyCiagZnakow.push_back('b'); list<char>::iterator Pozycja2Cyfr = search(danyciagznakow.begin(), DanyCiagZnakow.end(), Ciag2Cyfry.begin(), Ciag2Cyfry.end(), porownaj); // u if (Pozycja2Cyfr!= DanyCiagZnakow.end()) cout << "Znalazlem 2 cyfry pod rzad: pierwsza z nich to " << *Pozycja2Cyfr << endl; ycie jawnego predykatu WYNIK: Znalazlem 2 cyfry pod rzad: pierwsza z nich to
7 #include <string, list, algorithm, iostream> void Drukuj (string& napis) cout << napis << ", "; Sortowanie listy int main (void) list<string> Kompozytorzy; list<string>::iterator IteratorKompozytorow; Kompozytorzy.push_back("Szopen"); Kompozytorzy.push_back("Wieniawski"); Kompozytorzy.push_back("Penderecki"); Kompozytorzy.push_back("Gorecki"); Kompozytorzy.push_back("Kazik"); cout << "Lista przed posortowaniem:\n"; for_each( Kompozytorzy.begin(), Kompozytorzy.end(), Drukuj ); Kompozytorzy.sort(); cout << "\nlista po posortowaniu:\n"; for_each(kompozytorzy.begin(), Kompozytorzy.end(), Drukuj); cout << "\n"; WYNIK: Lista przed posortowaniem: Szopen, Wieniawski, Penderecki, Gorecki, Kazik, Lista po posortowaniu: Gorecki, Kazik, Penderecki, Szopen, Wieniawski, Do sortowania list u ywamy metody sort. Istnieje te ogólny ( globalny ) algorytm sort, jednak wymaga on zastosowania iteratorów o dost pie swobodnym, a lista takich nie dostarcza. #include <vector> #include <algorithm> Sortowanie tablic bool porownaj(int x, int y) // funkcja porównawcza return abs(x) < abs(y); void drukuj (int tab[], int ile) for (int i = 0; i < ile; i++) cout << tab[i] << " "; cout << "\n"; void drukuj (vector<int> const& v) for (int i = 0; i < v.size(); i++) cout << v[i] << " "; cout << "\n"; int main() int tab[] = 1, -5, 78, 3, -10; drukuj (tab, 5); sort (tab, tab+5); drukuj (tab, 5); sort (tab, tab+5, porownaj); drukuj (tab, 5); vector<int> v (tab, tab+5); // kopiuje tablice tab na nowotworzony wektor v sort (v.begin(), v.begin() + 3); // sortuje 3 pierwsze elementy vektora v drukuj(v); WYNIK:
8 ź ź #include <stdlib.h> #include <stdio.h> Sortowanie tablic w j zyku C int porownaj(const void* px, const void* py) int x = *((int*)px); int y = *((int*)py); x = abs(x); y = abs(y); if ( x < y ) return -1; if ( x == y ) return 1; void drukuj (int tab[], int ile) for (int i = 0; i < ile; i++) printf("%d ",tab[i]); printf("\n"); int main() int tab[] = 1, -5, 78, 3, -10; drukuj (tab, 5); qsort(tab, 5, sizeof(tab[0]), porownaj); drukuj (tab, 5); W j zyku C jest dost pna jedna funkcja sortuj ca (qsort), która potrafi posortowa tablic obiektów dowolnego typu. Poniewa jej twórcy nie wiedzieli, co b dzie przy jej pomocy sortowane, musimy jej poda : adres pocz tku tablicy, ilo jej elementów, rozmiar elementu w bajtach, funkcj sortuj c działaj c na adresach i odart z wszelkiej kontroli typów. void* to wska nik do czegokolwiek. W implementacji funkcji sortuj cej nale y dokonywa jawnych konwersji typów jej argumentów. Funkcja sortuj ca zwraca -1 (l < p), 0 (l == p) lub 1 (l > p). std::sort jest z zasady łatwiejsze w u yciu i szybsze ni qsort. Inn ogóln standardow funkcj j zyka C jest bsearch (binary serach) 15 Odczytywanie deklaracji kolekcji standardowych Kolekcje standardowe w standardowy sposób przechowuj o u ywanych przez siebie typach: informacje template<class T, class A = allocator<t> > class vector typedef A allocator_type; typedef A::size_type size_type; typedef A::difference_type difference_type; typedef A::reference reference; typedef A::const_reference const_reference; typedef A::value_type value_type; typedef T0 iterator; // typ T0 jest zale ny od implementacji typedef T1 const_iterator; // typ T1 jest zale ny od implementacji typedef reverse_iterator <iterator, value_type, reference, A::pointer, difference_type> reverse_iterator; typedef reverse_iterator<const_iterator, value_type, const_reference, A::const_pointer, difference_type> const_reverse_iterator;... Ostatnim argumentem (domy lnym) kontenerów standardowych jest alokator, czyli abstrakcyjny typ słu cy do zarz dzania pami ci. U ywaj alokatora standardowego (domy lnego), czyli o nim zapomnij: std::vector<int> v; // zostanie u yty alokator standardowy Pomy l dwa razy, zanim zaczniesz pisa swój alokator (B. Stroustrup). Oto fragment definicji standardowego alokatora: template<class T> class allocator typedef size_t size_type; // typ indeksu tablicy typedef ptrdiff_t difference_type; // typ ró nicy wska ników typedef T *pointer; typedef const T *const_pointer; typedef T& reference; typedef const T& const_reference; typedef T value_type;... 16
9 Do czego moe si przyda informacja o typach? Oto szablon funkcji, która oblicza sum wszystkich elementów dowolnego standardowego kontenera: #include <vector> template <class T> typename T::value_type suma (const T& kontener) typename T::value_type wynik = 0; typename T::const_iterator p = kontener.begin(); while (p!= kontener.end()) wynik += *p; // lepsze ni *p++, bo przyrostkowy++ mo ++p; return wynik; ; int main() int tmp [] = 1, 4, -1, 19, 11, 16; // sztuczk z opeartorem sizeof warto zapami ta : std::vector<int> v( tmp, tmp + sizeof(tmp)/sizeof(tmp[0]) ); std::list<int> lista (v.begin(), v.end()); std::cout << suma(v) << "\n"; // 50 std::cout << suma(lista) << "\n"; // 50 e by nieefektywny Konstruktory kontenerów template<class T, class A = allocator<t> > class vector // pusty kontener explicit vector( const A& al = A() ); // wektor n elementów o warto ci v (dla typów wbudowanych domy łnie v = 0) explicit vector( size_type n, const T& v = T(), const A& al = A() ); // konstruktor kopiuj cy vector( const vector& x ); // konstruktor kontenera o elementych skopiowanych z innego kontenera vector( const_iterator first, const_iterator last, const A& al = A() );... ; Przykłady: std::vector<int> v; //pusty wektor std::list<int> lista (7,2); // lista 7 dwójek std::vector<int> lz(100); // wektor 100 zer std::vector<int> w(v); // kopia wektora v std::list<int> q(w.begin(), w.end()) // kopia wektora w Uwagi: Słowo kluczowe typename umo liwia kompilatorowi odró nianie składowej, definiuj cej typ, od składowej, przechowuj cej dane. Operator sizeof zwraca ilo bajtów zajmowanych przez zmienn, obiekt, struktur lub tablic alokowan statycznie. Unikaj u ywania przyrostkowych operatorów ++ i
10 Naiwny wielomian: Konstruktory jawne (explicit) #include <iostream, ostream, vector> class Wielomian : public std::vector<int> Wielomian(std::vector<int> const& v): std::vector<int>(v) int operator() (int x) const int stopien = size()-1; int wynik = operator[](stopien); // int wynik = (*this)[stopien]; for (int i = stopien - 1; i >= 0; i--) wynik = wynik*x + at(i); return wynik; std::ostream& operator<< (std::ostream& F, Wielomian const& w) F << '('; for (int i = 0; i < w.size() - 1; i++) F << w[i] << ", "; if (!w.empty()) F << w.back(); F << ')'; return F; int main() int tmp[3] = 1,2,3; std::vector<int> v (tmp, tmp+3); Wielomian w (v); std::cout << "wielomian w = " << w << "\n"; std::cout << "wektor v = " << v << "\n"; std::cout << "w(1) = " << w(1) << "\n" << "w(-1) = " << w(-1) << "\n"; //OUTPUT: wielomian w = (1, 2, 3) // OK., operator<< (ostream& F, Wielomian const& w) wektor v = (1, 2, 3) // a sk d kompilator wie, jak wyswietla wektory???? w(1) = 6 w(-1) = 2 Wniosek: Ka dy konstruktor jednoargumentowy definiuje niejawny operator konwersji!!! To mo e prowadzi do nieoczekiwanych efektów. Opracowuj c wyra enia, kompilator mo e (w ostateczno ci) zastosowa jedn konwersj zdefiniowan przez u ytkownika. Aby wykluczy t nieprzyjemn zdefiniowa jako explicit : mo liwo class Wielomian : public std::vector<int> explicit Wielomian(std::vector<int> const& v) : std::vector<int>(v) int operator() (int x) const; ;, nale y konstruktor 19 20
11 Pozostałe metody kontenera std::vector void reserve (size_type n); size_type capacity () const; void resize (size_type n, T x = T()); size_type size () const; size_type max_size () const; bool empty () const; // rezerwacja pami ci // max. długo wektora bez realokacji // zmiana długo ci wektora + inicjacja // bie ca długo wektora // maksymalna (fizycznie) długo wektora // czy wektor jest pusty? iterator insert (iterator it, const T& x = T()); // wstaw x przed it void insert (iterator it, size_type n, const T& x); // wstaw n x-ów przed it void insert (iterator it, const_iterator first, const_iterator last); // wstaw [*first,..,*last) przed it iterator erase (iterator it); // usu *it iterator erase (iterator first, iterator last); // usu [*first,...,*last) void clear (); // erase( begin(), end() ) iterator begin (); // iterator do piewszego elementu const_iterator begin () const; // stały iterator do pierwszego elementu iterator end (); // iterator do elementu "1 za daleko" iterator end() const; // stały iterator do elementu "1 za daleko" reverse_iterator rbegin (); // iterator odwrotny do "1-go" elementu const_reverse_iterator rbegin () const; // stały -,,- reverse_iterator rend (); // iterator odwrotny do "ko cza" const_reverse_iterator rend () const; //stały -,,- A get_allocator () const; // Zwró alokator reference at (size_type pos); // Kontrolowany dost p do elementu const_reference at (size_type pos) const; // -,,- read-only reference operator[] (size_type pos); // niekontrolowany dost p const_reference operator[] (size_type pos); // -,,- read-only reference front (); // pierwszy element const_reference front () const; // -,,- read-only reference back (); // ostatni element const_reference back () const; // ostatni element read-only void push_back (const T& x); // resize() + wstaw na koniec wektora void pop_back (); // usu z ko ca wektora (+ resize()) void assign (const_iterator first, const_iterator last); // jak konstruktor void assign (size_type n, const T& x = T()); // jak konstruktor void swap (vector & x); // zamie *this i x 21 Wstawiacze Obiekty klasy back_insert_iterator udaj iteratory, a naprawd do wstawiania warto ci val przekazywanej w operacji *iterator++ = val na ko cu kontenera operacj push_back. W ten sposób wirtualnie wydłu aj istniej cy kontener do niesko czono ci. Przykład: niech v i w b d niepustymi wektorami typu std::vector<int>. Wtedy std::copy(v.begin(), v.end(), back_insert_iterator<std::vector<int> >(w) ); doł cza zawarto wektora v na ko cu wektora w (powoduju c rozszerzenie w). // przykładowa implementacja #include <cstdlib> #include <vector> Jak to jest mo liwe? template<class KONTENER> class back_insert_iterator explicit back_insert_iterator (KONTENER & kontener) : _kontener(kontener) back_insert_iterator& operator*() return *this; back_insert_iterator& operator++() return *this; back_insert_iterator& operator++(int) return *this; back_insert_iterator& operator= (const typename KONTENER::value_type & x) _kontener.push_back(x); return *this; protected: KONTENER & _kontener; ; słu 22
12 Klasa back_insert_iterator ma fundamentaln nieludzko skomplikowan składni. Na pomoc wzywamy szablony funkcji!! template <class KONTENER> inline back_insert_iterator<kontener> back_inserter(kontener & kontener) return back_insert_iterator<kontener> (kontener); Teraz zamiast std::copy(v.begin(), v.end(), std::back_insert_iterator<std::vector<int> > (w) ); mo emy napisa po prostu std::copy(v.begin(), v.end(), back_inserter(w) ); Szablony funkcji s w STL cz sto u wad ywane do upraszczania zapisu W przeciwie stwie do szablonów klas nie wymagaj bowiem od u ytkownika jawnego podawania klas, parametyryzuj cych szablon. Uzyskanie takich informacji mogłoby by pracochłonne i zniech ca do u ywania STL. W funkcji back_inserter wykorzystuje si to, e kompilator mo e automatycznie odczyta typ argumentów szablonu funkcji i na tej podstawie samodzielnie wygenerowa po dany szablon klasy, parametrtyzuj c go typami odczytanymi z argumentów funkcji. Takie funkcje nazywamy wrapperami ( opakowaniami ). Oryginalne wstawiacze STL znajduj si w nagłówku <iterator> Wstawiacze biblioteki STL iterator Wrapper działanie instrukcji???insert_iterator = value; back_insert_iterator back_inserter(kontener) container.push_back(value); front_insert_iterator insert_iterator front_inserter(kontener) container.push_front(value); inserter(kontener, container.insert(container_iterator, KONTENER::iterator) value); : Przykład zastosowania wstawiacza back_inserter template<typename T> std::ostream& operator<< (std::ostream& F, const std::vector<t>& vec) F << "("; for (unsigned i = 0; i < vec.size(); ++i) F << vec[i] << ", "; F << "\b\b)"; // nieelegenckie return F; int main(int argc, char *argv[]) std::vector<int> v; // pusty wektor liczb całkowitych v.push_back(0); // wektor v został rozszerzony; v[0] == 0; std::back_insert_iterator<std::vector<int> > back_iter(v); // definicja wstawiacza *back_iter++ = 1; // równowa ne instrukcji v.push_back(1); *back_iter++ = 2; // równowa ne instrukcji v.push_back(2); std::cout << "v = " << v << "\n"; // v = (0, 1, 2) int tab[] = 10,20,30; std::copy(tab, tab+3, back_iter); std::cout << "v = " << v << "\n"; // v = (0, 1, 2, 10, 20, 30) std::copy(tab, tab+3, back_inserter(v)); // wyj tkowo przedrostek std:: niepotrzebny! std::cout << "v = " << v << "\n"; // v = (0, 1, 2, 10, 20, 30, 10, 20, 30) system("pause"); WYNIK: v = (0, 1, 2) v = (0, 1, 2, 10, 20, 30) v = (0, 1, 2, 10, 20, 30, 10, 20, 30) 23 24
13 ź ź ź Iteratory strumieni wej cia i wyj cia W bibliotece STL strumienie wej cia/wyj cia mo na traktowa jak zwykłe kontenery. W przypadku strumieni wej cia cel ten realizuj iteratory tylko do odczytu, istream_iterator a w przypadku strumieni wyj cia iteratory tylko do zapisu, ostream_iterator Dzi ki tej wła ciwo ci instrukcje vector<int> V; copy(istream_iterator<int>(cin), istream_iterator<int>(), back_inserter(v)); powoduj skopiowanie liczb całkowitych ze standardowego wej cia do pocz tkowo pustego wektora v. Z kolei instrukcje std::vector<int> V; //... std::copy(v.begin(), V.end(), std::ostream_iterator<int>(std::cout, "\n") ); powoduj skopiowanie zawarto ci wektora v na standardowe wyj cie (po jednej liczbie w wierszu). Aby u y istream_iterator lub ostream_iterator, nale y poda a) z jakim strumieniem ma by zwi zany dany iterator (np. cin) b) jaki jest typ elementów w strumieniu-kontenerze istream_iterator<int>(cin) Dodatkowo iterator ostream_iterator umo liwia zdefiniowanie separatora danych: ostream_iterator<int>(std::cout, "\n") Bezargumentowy konstruktor iteratora istream_iterator tworzy iterator wskazuj cy poza kontener (= koniec pliku lub bł d). istream_iterator<int>() Nele y pami ta, e operacje na iteratorach strumieni wej cia/wyj cia faktycznie realizowane s poprzez operatory operator>> lub operator<<. Dlatego np. stadardowo na wej ciu pomijane s wszystkie białe znaki. Przykłady u ycia iteratorów strumieni wej cia/wyj cia Przykład 1 vector<int> v; copy(istream_iterator<int>(cin), istream_iterator<int>(), back_inserter(v)); copy(v.rbegin(), v.rend(), ostream_iterator<int>(cout, "\n")); wej cie (cin): Antek wyj cie (cout): W powy szym kodzie wczytano 5 liczb typu int (a do wyst pienia bł du przy próbie wczytania litery 'A'), po czym przy pomocy iteratorów odwrotnych (rbegin, rend) wypisano je w odwrotnej kolejno ci, bez separatorów, w strumieniu cout. Przykład 2 ifstream F("dane1.dat"); ifstream G("dane2.dat"); ofstream SUMA("suma.dat"); transform (istream_iterator<int>(f), // pocz tek ródła danych nr 1 istream_iterator<int>(), // koniec ródła danych nr 1 istream_iterator<int>(g), // pocz tek ródła danych nr 2 ostream_iterator<int>(suma, "\t"), // gdzie zapisywa wyniki transformacji plus<int>() ); // co robi z parami obiektów pobieranych z wej cia? wej cie ("dane1.dat"): wej cie ("dane2.dat"): wyj cie ("suma.dat"):
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.
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
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
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.
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
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
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
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.
Ć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
Wartości domyślne, szablony funkcji i 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 2012 Bogdan Kreczmer Niniejszy dokument
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
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
Techniki programowania INP001002Wl rok akademicki 2017/18 semestr letni. Wykład 5. Karol Tarnowski A-1 p.
Techniki programowania INP001002Wl rok akademicki 2017/18 semestr letni Wykład 5 Karol Tarnowski karol.tarnowski@pwr.edu.pl A-1 p. 411B Plan prezentacji Standardowa biblioteka szablonów (Standard Template
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
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,
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
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
PROGRAMOWANIE OBIEKTOWE W C++ cz. 2. Dziedziczenie, operacje wej cia-wyj cia, przeładowanie operatorów.
PROGRAMOWANIE OBIEKTOWE W C++ cz. 2 Dziedziczenie, operacje wej cia-wyj cia, przeładowanie operatorów. Dziedziczenie Dziedziczenie jest to technika pozwalaj c na definiowanie nowej klasy przy wykorzystaniu
Operatory na rzecz typu TString
Operatory na rzecz typu TString Dopiszmy w definicji klasy operator[], dzięki któremu potraktujemy obiekt jak tablicę class TString { public: char& operator[]( size_t n ); const char& operator[]( size_t
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
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
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................................
C++: STL. STL: kontenery. STL: kontenery. STL: kontenery. STL: kontenery. Programowanie Obiektowe C++: Standard Template Library
Programowanie Obiektowe C++: Standard Template Library C++: STL Kontenery - wprowadzenie 1 Wprowadzenie Rozwiązanie większości zadań programistycznych polega na gromadzeniu i przetwarzaniu danych w ilości
Projektowanie i programowanie obiektowe (materiały do wykładu cz. VI)
Projektowanie i programowanie obiektowe (materiały do wykładu cz. VI) Jacek Cichosz www.zssk.pwr.wroc.pl Katedra Systemów i Sieci Komputerowych Politechnika Wrocławska Dziedziczenie 221 Dziedziczenie Dziedziczenie
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
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
obiekty funkcyjne - funktory
#include #include #include #include #include #include #include #include #include #include using namespace
PROE wykład 7 kontenery tablicowe, listy. dr inż. Jacek Naruniec
PROE wykład 7 kontenery tablicowe, listy dr inż. Jacek Naruniec Prosty kontener oparty na tablicach Funkcja dodawanie pojedynczego słonia do kontenera: 1 2 3 4 5 6 7 11 12 13 14 15 16 17 21 22 23 24 25
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ę
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
IMIĘ i NAZWISKO: Pytania i (przykładowe) Odpowiedzi
IMIĘ i NAZWISKO: Pytania i (przykładowe) Odpowiedzi EGZAMIN PIERWSZY (25 CZERWCA 2013) JĘZYK C++ poprawiam ocenę pozytywną z egzaminu 0 (zakreśl poniżej x) 1. Wśród poniższych wskaż poprawną formę definicji
C++: STL. STL: kontenery. STL: kontenery. STL: kontenery. STL: kontenery. Programowanie Obiektowe C++: Standard Template Library.
Programowanie Obiektowe C++: Standard Template Library C++: STL Kontenery 1 Wprowadzenie Rozwiązanie większości zadań programistycznych polega na gromadzeniu i przetwarzaniu danych w ilości nieznanej w
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
Kurs programowania. Wykład 9. Wojciech Macyna
Wykład 9 Java Collections Framework (w C++ Standard Template Library) Kolekcja (kontener) Obiekt grupujacy/przechowuj acy jakieś elementy (obiekty lub wartości). Przykładami kolekcji sa zbiór, lista czy
dr inż. Jarosław Forenc
Informatyka 2 Politechnika Białostocka - Wydział Elektryczny Elektrotechnika, semestr III, studia niestacjonarne I stopnia Rok akademicki 2011/2012 Pracownia nr 9 (20.01.2012) dr inż. Jarosław Forenc Rok
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
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
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
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
Paradygmaty programowania. Paradygmaty programowania
Paradygmaty programowania Paradygmaty programowania Dr inż. Andrzej Grosser Cz estochowa, 2013 2 Spis treści 1. Zadanie 2 5 1.1. Wprowadzenie.................................. 5 1.2. Wskazówki do zadania..............................
Wzorce funkcji (szablony)
Wzorce funkcji (szablony) Wzorce funkcji (ang. function template) dają możliwość wielokrotnego wykorzystywania tego samego kodu funkcji dla różnych typów danych. Załóżmy, że chcemy zdefiniować funkcję
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
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
W przypadku STL w specyfikacji nazwy pliku nagłówkowego brak rozszerzenia tj. <string> <string.h> zamiast
Wykład 12 - Biblioteka stadardowa.sxw 1 Przegląd biblioteki standardowej C++; W porównaniu z pierwszymi implementacjami i specyfikacjami C++ biblioteka standardowa języka C++ bardzo się rozrosła, a w latach
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
Technologie programowania Wykład 4. Szablony funkcji Notes. Szablony funkcji Notes. Szablony funkcji Notes. Notes. Przemek Błaśkiewicz.
Technologie programowania Wykład 4 Przemek Błaśkiewicz 9 maja 2017 1 / 54 Szablony funkcji Często w programach zachodzi potrzeba użycia funkcji, które co do mechanizmu działaja tak samo, ale różnia się
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
Programowanie 2. Język C++. Wykład 2.
2.1 Definicja, deklaracja, wywołanie funkcji.... 1 2.2 Funkcje inline... 4 2.3 Przekazanie do argumentu funkcji wartości, adresu zmiennej.... 5 2.4 Wskaźniki do funkcji... 8 2.5 Przeładowanie funkcji...
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)
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
PROGRAMOWANIE OBIEKTOWE W C++ - cz 1. Definicja klasy, składniki klasy, prawa dost pu, definiowanie funkcji składowych, konstruktory i destruktory.
PROGRAMOWANIE OBIEKTOWE W C++ - cz 1 Definicja klasy, składniki klasy, prawa dost pu, definiowanie funkcji składowych, konstruktory i destruktory. Program komputerowy opisuje w pewien sposób rzeczywisto.
Dziedziczenie : Dziedziczenie to nic innego jak definiowanie nowych klas w oparciu o już istniejące.
Programowanie II prowadzący: Adam Dudek Lista nr 8 Dziedziczenie : Dziedziczenie to nic innego jak definiowanie nowych klas w oparciu o już istniejące. Jest to najważniejsza cecha świadcząca o sile programowania
Automatyczne tworzenie operatora = Integer2& operator=(const Integer& prawy) {
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
1. Wprowadzenie do C/C++
Podstawy Programowania :: Roman Grundkiewicz :: 014 Zaj cia 1 1 rodowisko Dev-C++ 1. Wprowadzenie do C/C++ Uruchomienie ±rodowiska: Start Programs Developments Dev-C++. Nowy projekt: File New Project lub
1. Wprowadzenie do C/C++
Podstawy Programowania - Roman Grundkiewicz - 013Z Zaj cia 1 1 rodowisko Dev-C++ 1. Wprowadzenie do C/C++ Uruchomienie ±rodowiska: Start Programs Developments Dev-C++. Nowy projekt: File New Project lub
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
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
Składnia C++ Programowanie Obiektowe Mateusz Cicheński
Składnia C++ Programowanie Obiektowe Mateusz Cicheński Klasy i modyfikatory dostępu Przesłanianie metod Polimorfizm Wskaźniki Metody wirtualne Metody abstrakcyjne i interfejsy Konstruktory i destruktory
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,
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
TEMAT : KLASY POLIMORFIZM
TEMAT : KLASY POLIMORFIZM 1. Wprowadzenie do polimorfizmu i funkcji wirtualnych w języku C++ Język C++ zakłada, że w pewnych przypadkach uzasadnione jest tworzenie klas, których reprezentanci w programie
Automatyczne tworzenie operatora = Integer2& operator=(const Integer& prawy) {
Przeciążanie a dziedziczenie class Integer2: public Integer Operatory, z wyjątkiem operatora przypisania są automatycznie dziedziczone w klasach pochodnych. Integer2(int i): Integer(i) Automatyczne tworzenie
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
3-4. 5-7. 8-10. 11-12 15-18. 19-22
1. 2. 3-4. 5-7. 8-10. 11-12 13-14. 15-18. 19-22 23-28. 29-30. Programowanie strukturalne i obiektowe Typ wyliczeniowy, lista wyliczeniowa. Rzutowanie w C++. Wskaźniki i referencje. Działania na wskaźnikach.
Język C++ Różnice między C a C++
Język C++ Różnice między C a C++ Plan wykładu C a C++ Różnice ogólne Typy Deklaracje zmiennych C++ jako rozszerzenie C Domyślne argumenty funkcji Przeciążanie funkcji Referencje Dynamiczny przydział pamięci
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
Spis treści 1. Wstęp 2. Projektowanie systemów informatycznych
Spis treści 1. Wstęp... 9 1.1. Inżynieria oprogramowania jako proces... 10 1.1.1. Algorytm... 11 1.2. Programowanie w językach wysokiego poziomu... 11 1.3. Obiektowe podejście do programowania... 12 1.3.1.
class A { public: A(): i(5), s("abc") { } int i; string s; };
UWAGA! PoniŜej są pytania z egzaminu, z zaznaczonymi poprawnymi odpowiedziami. Przy niektórych z nich napisałem jakieś słowo komentarza (czemu tak, a nie inaczej...). Przypominam, Ŝe zasada punktacji była
Programowanie w C++ Wykład 8. Katarzyna Grzelak. 15 kwietnia K.Grzelak (Wykład 8) Programowanie w C++ 1 / 33
Programowanie w C++ Wykład 8 Katarzyna Grzelak 15 kwietnia 2019 K.Grzelak (Wykład 8) Programowanie w C++ 1 / 33 Klasy - powtórzenie Klasy typy definiowane przez użytkownika Klasy zawieraja dane składowe
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
Programowanie i struktury danych
Programowanie i struktury danych Wykªad 3 1 / 37 tekstowe binarne Wyró»niamy dwa rodzaje plików: pliki binarne pliki tekstowe 2 / 37 binarne tekstowe binarne Plik binarny to ci g bajtów zapami tanych w
0.1 Hierarchia klas. 0.1.1 Diagram. 0.1.2 Krótkie wyjaśnienie
0.1 Hierarchia klas 0.1.1 Diagram 0.1.2 Krótkie wyjaśnienie Po pierwsze to jest tylko przykładowe rozwiązanie. Zarówno na wtorkowych i czwartkowych ćwiczeniach odbiegaliśmy od niego, ale nie wiele. Na
Programowanie w C++ Wykład 8. Katarzyna Grzelak. 7 maja K.Grzelak (Wykład 8) Programowanie w C++ 1 / 31
Programowanie w C++ Wykład 8 Katarzyna Grzelak 7 maja 2018 K.Grzelak (Wykład 8) Programowanie w C++ 1 / 31 STL - powtórzenie STL Standard Template Libarary standardowa biblioteka szablonów Składowe biblioteki:
Abstrakcyjny typ danych
Abstrakcyjny typ danych Abstrakcyjny Typ Danych (abstract data type-adt): zbiór wartości wraz z powiązanymi z nimi operacjami; operacje są zdefiniowane w sposób niezależny od implementacji; operacje są
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ę
Wprowadzenie do szablonów szablony funkcji
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 programowania obiektowego.
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
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
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
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
Wprowadzenie do szablonów szablony funkcji
Wprowadzenie do szablonów szablony funkcji 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
EGZAMIN 2 (14 WRZEŚNIA 2015) JĘZYK C++
IMIĘ i NAZWISKO: przykładowe odpowiedzi NR: 0 EGZAMIN 2 (14 WRZEŚNIA 2015) JĘZYK C++ 1. Napisz precyzyjnie co to jest ptr jeśli: const * const Foo ptr; ptr to stały wskaźnik do stałego obiektu typu Foo
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 ( ( *' *''*,
Podstawy Programowania
Podstawy Programowania dr Elżbieta Gawrońska gawronska@icis.pcz.pl Instytut Informatyki Teoretycznej i Stosowanej dr Elżbieta Gawrońska (ICIS) Podstawy Programowania 05 1 / 15 Plan wykładu 1 Biblioteka
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
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,
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ż.
UNIWERSYTET MARII CURIE-SKŁODOWSKIEJ WYDZIAŁ MATEMATYKI, FIZYKI I INFORMATYKI INSTYTUT INFORMATYKI. Wprowadzenie do STL.
Wprowadzenie do STL UNIWERSYTET MARII CURIE-SKŁODOWSKIEJ WYDZIAŁ MATEMATYKI, FIZYKI I INFORMATYKI INSTYTUT INFORMATYKI Wprowadzenie do STL Paweł Mikołajczak LUBLIN 2012 Instytut Informatyki UMCS Lublin
Programowanie w C++ Wykład 9. Katarzyna Grzelak. 14 maja K.Grzelak (Wykład 9) Programowanie w C++ 1 / 30
Programowanie w C++ Wykład 9 Katarzyna Grzelak 14 maja 2018 K.Grzelak (Wykład 9) Programowanie w C++ 1 / 30 Klasy - powtórzenie Klasy typy definiowane przez użytkownika Klasy zawieraja dane składowe plus
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 5 W programowaniu obiektowym programista koncentruje się na obiektach. Zadaje sobie pytania typu:
BIBLIOTEKA STANDARDOWA C++
Programowanie Obiektowe (język C++) Wykład 11. BIBLIOTEKA STANDARDOWA C++ Tomasz Marks - Wydział MiNI PW -1- Tomasz Marks - Wydział MiNI PW -2- Biblioteka standardowa C++ - Wprowadzenie Główne elementy
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
Stos liczb całkowitych
Stos liczb całkowitych class StosInt int* tab; unsigned size ; StosInt(unsigned s=10) tab=new int[size=s];top=0; ~StosInt()delete[] tab; void push(int i)tab[top++]=i; int pop(void) return tab[--top]; int
Wstęp do programowania obiektowego. WYKŁAD 3 Dziedziczenie Pola i funkcje statyczne Funkcje zaprzyjaźnione, this
Wstęp do programowania obiektowego WYKŁAD 3 Dziedziczenie Pola i funkcje statyczne Funkcje zaprzyjaźnione, this 1 Nazwa typu Rozmiar Zakres Uwagi bool 1 bit wartości true albo false stdbool.h TYPY ZNAKOWE
Spis treści OPERACJE NA TEKSTACH W JĘZYKU C++ Informatyka 2. Instrukcja do pracowni specjalistycznej z przedmiotu. Numer ćwiczenia INF31
Politechnika Białostocka Wydział Elektryczny Katedra Elektrotechniki Teoretycznej i Metrologii Instrukcja do pracowni specjalistycznej z przedmiotu Informatyka 2 Kod przedmiotu: ES1C300 016 (studia stacjonarne)
Zajęcia nr 5 Algorytmy i wskaźniki. dr inż. Łukasz Graczykowski mgr inż. Leszek Kosarzewski Wydział Fizyki Politechniki Warszawskiej
Zajęcia nr 5 Algorytmy i wskaźniki dr inż. Łukasz Graczykowski mgr inż. Leszek Kosarzewski Wydział Fizyki Politechniki Warszawskiej Plan Zapis i odczyt z plików tekstowych O tablicach ciąg dalszy Referencje
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
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;
Listy i funkcje zaprzyjaźnione w C++
Listy i funkcje zaprzyjaźnione w C++ Na ostatnich zajęciach zajmowaliśmy się obsługą gniazdek w systemie Windows. Zajęcia te były w całości realizowane w aplikacji konsolowej. Takie podejście znaczenie