STL: kontenery. STL: kontenery. STL: kontenery. STL: kontenery. STL: kontenery. STL: kontenery
|
|
- Michał Świątek
- 6 lat temu
- Przeglądów:
Transkrypt
1 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, dlatego brak implementacji operatora indeksowania [], najlepiej sprawdza się przy iterowaniu wzdłuż sekwencji lub w jej przeciwnym kierunku, ma większy narzut pamięciowy niż pozostałe dwa kontenery musi przechowywać jeszcze wskaźniki nast i poprz, dlatego efektywniej jest w nim przechowywać małą liczbę dużych obiektów niż wiele drobnych, przemieszczanie obiektów wewnątrz listy polega na przełączaniu wskaźników. Sortowanie listy (na dwa sposoby) 1. void sort(); // metoda w klasie 2. template <typename Compare> void sort (Compare comp); Elementy są porównywane za pomocą operatora < (porządek rosnący) lub comp. comp typ obiektu funkcyjnego (może być zrobiony przez programistę); dla dwóch wartości tego samego typu zwraca true, jeżeli pierwszy argument jest mniejszy od drugiego, a false w przeciwnym przypadku. Identyczne elementy po posortowaniu zachowują swoje położenie względem siebie. W przypadku wywołania metody cała operacja nie powoduje wywołania konstruktorów, destruktorów ani kopiowania obiektów list <int> c1; list <int>::iterator c1_iter; c1.push_back( 20 ); c1.push_back( 30 ); cout << "Before sorting: c1 ="; c1.sort( ); cout << "After sorting c1 ="; Obiekt funkcyjny służący do porównywania: zwraca true, jeżeli pierwszy argument jest większy c1.sort( greater<int>( ) ); cout << "After sorting with 'greater than' operation, c1 ="; 46 Obiekt funkcyjny greater służący do porównania C++98: template <class T> struct greater : binary_function <T,T,bool> { bool operator() (const T& x, const T& y) const { return x > y; template <class Arg1, class Arg2, class Result> struct binary_function { typedef Arg1 first_argument_type; typedef Arg2 second_argument_type; typedef Result result_type; 47 Obiekt funkcyjny greater służący do porównania C++11: template <class T> struct greater { bool operator() (const T& x, const T& y) const { return x > y; typedef T first_argument_type; typedef T second_argument_type; typedef bool result_type; reverse odwrócenie kolejności elementów w liście list <int> c1; list <int>::iterator c1_iter; c1.push_back( 20 ); c1.push_back( 30 ); cout << "c1 ="; c1.reverse( ); cout << "Reversed c1 =";
2 Przenoszenie elementów listy z jednego kontenera do drugiego 1. void splice (iterator position, list& x); // cała lista 2. void splice (iterator position, list& x, iterator i); // pojedynczy element 3. void splice (iterator position, list& x, iterator first, iterator last); // zakres elementów w liście Przenosi elementy i wstawia przed miejsce wskazywane przez position: 1. przenosi wszystkie elementy z x do swojego kontenera, 2. przenosi element i z x do swojego kontenera, 3. przenosi elementy z zakresu [first,last) z x do swojego kontenera. Przenoszenie elementów listy list <int> c1, c2, c3, c4; list <int>::iterator c1_iter, c2_iter, w_iter, f_iter, l_iter; c1.push_back( 11 ); c2.push_back( 12 ); c2.push_back( 20 ); c2.push_back( 21 ); c3.push_back( 30 ); c3.push_back( 31 ); c4.push_back( 40 ); c4.push_back( 41 ); c4.push_back( 42 ); w_iter = c2.begin( ); w_iter++; c2.splice( w_iter, c1 ); cout << Po przeniesieniu c1 do c2: c2="; for ( c2_iter = c2.begin( ); c2_iter!= c2.end( ); c2_iter++ ) Po przeniesieniu c1 do c2: c2 = Rozmiary obydwu kontenerów ulegają zmianie Przenoszenie elementów listy list <int> c1, c2, c3, c4; list <int>::iterator c1_iter, c2_iter, w_iter, f_iter, l_iter; c1.push_back( 11 ); c2.push_back( 12 ); c2.push_back( 20 ); c2.push_back( 21 ); c3.push_back( 30 ); c3.push_back( 31 ); c4.push_back( 40 ); c4.push_back( 41 ); c4.push_back( 42 ); // kontynuacja; c2: f_iter = c3.begin( ); c2.splice( w_iter, c3, f_iter ); cout << " Po przeniesieniu pierwszego << " z c3 do c2: c2 ="; for ( c2_iter = c2.begin( ); c2_iter!= c2.end( ); c2_iter++ ) c2: Po przeniesieniu pierwszego z c3 do c2: c2 = Przenoszenie elementów listy list <int> c1, c2, c3, c4; list <int>::iterator c1_iter, c2_iter, w_iter, f_iter, l_iter; c1.push_back( 11 ); c2.push_back( 12 ); c2.push_back( 20 ); c2.push_back( 21 ); c3.push_back( 30 ); c3.push_back( 31 ); c4.push_back( 40 ); c4.push_back( 41 ); c4.push_back( 42 ); // kontynuacja; c2: f_iter = c4.begin( ); l_iter = c4.end( ); l_iter--; c2.splice( w_iter, c4, f_iter, l_iter ); cout << " Po przeniesieniu zakresu z c4 " << "do c2: c2 ="; for ( c2_iter = c2.begin( ); c2_iter!= c2.end( ); c2_iter++ ) c2: Po przeniesieniu zakresu z c4 do c2: c2 = Usuwanie z listy void remove (const value_type& val); usuwa z listy wszystkie elementy, których wartość jest równa val, na rzecz usuwanych elementów wywoływane są destruktory a rozmiar listy jest redukowany. remove przykład: list <int> c1; list <int>::iterator c1_iter, c2_iter; c1.push_back( 5 ); c1.push_back( 100 ); c1.push_back( 5 ); c1.push_back( 200 ); c1.push_back( 5 ); c1.push_back( 300 ); cout << "Początkowa zawartość listy" << " c1 ="; for ( c1_iter = c1.begin( ); c1_iter!= c1.end( ); c1_iter++) list <int> c2 = c1; c2.remove( 5 ); cout << Po usunięciu elementów " << "z wartością 5, lista c2 ="; for ( c2_iter = c2.begin( ); c2_iter!= c2.end( ); c2_iter++)
3 Łączenie posortowanych list 1. void merge (list& x); // metoda w klasie 2. template <typename Compare> void merge (list& x, Compare comp); wprowadza dane z x do listy z zachowaniem ich posortowania w taki sposób, aby posortowanie całości zostało zachowane (obydwa kontenery powinny być uprzednio posortowane wg tego samego kryterium). po zakończeniu kontener x jest pusty, Elementy są porównywane za pomocą operatora < lub comp. comp typ obiektu funkcyjnego; dla dwóch wartości tego samego typu zwraca true, jeżeli pierwszy argument jest mniejszy od drugiego, a false w przeciwnym przypadku. W przypadku wywołania metody cała operacja nie powoduje wywołania konstruktorów, destruktorów ani kopiowania obiektów. 56 merge przykład: list <int> c1, c2; list <int>::iterator c2_iter; c1.push_back( 3 ); c1.push_back( 6 ); c2.push_back( 2 ); c2.push_back( 4 ); c2.merge( c1 ); // domyślnie połączenie następuje w porządku rosnącym cout << "Po wykonaniu merge c2 ="; for ( c2_iter = c2.begin( ); c2_iter!= c2.end( ); c2_iter++ ) Po wykonaniu merge c2 = Usuwanie powtórzeń 1. void unique(); 2. template <typename BinaryPredicate> void unique (BinaryPredicate binary_pred); usuwa wszystkie elementy poza pierwszymi ze znalezionych szeregów identycznych elementów w liście (metoda specjalnie dedykowana dla list posortowanych), Elementy są porównywane za pomocą operatora = lub binary_pred, binary_pred typ obiektu funkcyjnego; dla dwóch wartości tego samego typu zwraca true, jeżeli są sobie równe, a false w przeciwnym przypadku, Dla wszystkich par elementów w kontenerze zostanie wywołany binary_pred(*i,*(i-1)) i jeżeli zwróci true, to usunie element wskazywany przez i. 58 list <int> c1; list <int>::iterator c2_iter; c1.push_back( -10 ); c1.push_back( 20 ); c1.push_back( 20 ); c1.push_back( -10 ); list <int> c2 = c1; c2.unique( ); // zakładamy, że lista jest posortowana (duplikaty sąsiadują) cout << "Po usunięciu duplikatów: c2 ="; for ( c2_iter = c2.begin( ); c2_iter!= c2.end( ); c2_iter++ ) Po usunięciu duplikatów: c2 = c2 = Zamiana zawartości kontenerów void swap (list& x); Zamienia zawartość kontenera wskazywanego przez this z zawartością kontenera x. 60 list <int> c1,c2; list <int>::iterator c1_iter, c2_iter; c1.push_back( 1 ); c1.push_back( 2 ); c1.push_back( 3 ); c2.push_back( 10 ); c2.push_back( 20 ); c1.swap( c2 ); cout << "Po zamianie z c2, lista c1:"; cout << "Lista c2 po zamianie:"; for ( c2_iter = c2.begin( ); c2_iter!= c2.end( ); c2_iter++ ) Po zamianie z c2, lista c1: Lista c2 po zamianie:
4 Adapter kontenera adapter wykorzystuje jeden z kontenerów sekwencyjnych do przechowywania własnych danych, z punktu widzenia programisty rozróżnianie adapter kontenera kontener nie ma zbyt wiele sensu, jest to istotne wyłącznie dla twórców biblioteki. Typy kontenerów STL Adaptery kontenerów 63 Adapter kontenera stack (stos) template <typename T, typename C1 = deque<t>> class stack; stos daje bardzo niewielki zbiór metod, tj. tylko te właściwe dla operacji na stosie (połóż, zdejmij); m.in. nie da się iterować wzdłuż elementów stosu (LIFO), Kontener C1 powinien dostarczać następujących metod: empty size back push_back pop_back Klasy podstawowych kontenerów sekwencyjnych vector, deque oraz list spełniają te wymagania. 64 Stos przykład: int main () { stack < string, vector <string > > str_stack ; // albo np.: stack <string, list<string> > str_stack; // albo też po prostu: stack <string> str_stack; string quote [3] = {" Ala \n", "ma\n", " kota \n" for ( int i = 0; i < 3; ++i) str_stack.push(quote[i]); // umieszcza kopię na szczycie stosu while (!str_stack.empty()) { cout << str_stack.top(); // zwraca referencję do elementu na szczycie str_stack.pop(); // zdejmuje szczytowy element ze stosu 65 Adapter kontenera stack (stos) push przyjmuje jako argument wartość, która posłuży do zainicjalizowania nowego obiektu, tj. argument dla konstruktora typu danych przechowywanych na stosie, pop usuwa fizycznie ze stosu jeden, ostatnio dodany obiekt, tj. wywoływany jest na jego rzecz destruktor. Adapter kontenera queue (kolejka) template <typename T, typename C1 = deque<t>> class queue; jest to ograniczona wersja kontenera deque: obsługuje wstawianie do kolejki jedynie pojedynczych elementów na jeden jej koniec i pobieranie pojedynczych elementów z drugiego końca (FIFO), nie ma żadnych metod dodatkowych charakterystycznych dla kontenerów sekwencyjnych; nie można iterować wzdłuż kolejki, domyślnym typem argumentu szablonu jest deque
5 Adapter kontenera queue (kolejka) template <typename T, typename C1 = deque<t>> class queue; Kontener C1 powinien dostarczać następujących metod: empty size back push_back pop_back Klasy podstawowych kontenerów sekwencyjnych vector, deque oraz list spełniają te wymagania. Przykład kolejka queue <int> q1; q1.push( 10 ); q1.push( 20 ); q1.push( 30 ); queue <int>::size_type i; i = q1.size( ); cout << "Długość kolejki wynosi " << i << "." << endl; int& ii = q1.back( ); int& iii = q1.front( ); cout << "Liczba z tyłu kolejki q1 to " << ii << "." << endl; cout << "Liczba stojąca na czele kolejki q1 to " << iii << "." << endl; q1.pop(); i = q1.size(); cout << "Po zdjęciu elementu długość kolejki wynosi " << i << "." << endl; Adapter kontenera priority_queue (kolejka priorytetowa) template < typename T, typename C1 = vector<t>, typename Compare = less<typename C1::value_type>> class priority_queue; kolejka priorytetowa działa jak zwykła kolejka, ale wywołanie metody push w celu wstawienia obiektu do kolejki priorytetowej oznacza wstawienie elementu w określonym miejscu kolejki, zależnie od priorytetu obiektu; jest to więc kolejka elementów posortowanych wg określonej wartości (element o wartości najwyższej jest na pierwszym miejscu w kolejce). sortowanie odbywa się z wykorzystaniem funkcji lub obiektu funkcyjnego definiującego relację mniejsze niż dla typu elementów przechowywanych w kolejce domyślnie jest to szablon elementu funkcyjnego less 70 Obiekt funkcyjny less służący do porównania template <class T> struct less : binary_function <T,T,bool> { bool operator() (const T& x, const T& y) const { return x<y; template <class Arg1, class Arg2, class Result> struct binary_function { typedef Arg1 first_argument_type; typedef Arg2 second_argument_type; typedef Result result_type; 71 Przykład kolejka liczb posortowanych rosnąco (element o wartości najwyższej jest na pierwszym miejscu w kolejce): Przykład wskazanie własnego kontenera (vector) i własnego obiektu funkcyjnego (szablon elementu funkcyjnego greater sortowanie od największego do najmniejszego): int main() { priority_queue<int> pqi; srand(time(0)); // uruchamiamy generator liczb losowych for(int i = 0; i < 100; i++) pqi.push(rand() % 25); while(!pqi.empty()) { cout << pqi.top() << ' '; pqi.pop(); int main() { priority_queue<int, vector<int>, greater<int> > pqi; srand(time(0)); // uruchamiamy generator liczb losowych for(int i = 0; i < 100; i++) pqi.push(rand() % 25); while(!pqi.empty()) { cout << pqi.top() << ' '; pqi.pop();
6 Typy kontenerów STL Kontenery asocjacyjne Kontenery asocjacyjne set, map, multiset i multimap wraz z wartościami przechowują klucze dla tych wartości (map i multimap), lub traktują klucze jako przechowywane wartości (set i multiset) w przypadku set podstawowymi operacjami są polecenia wstawiania elementu do kontenera oraz sprawdzania czy taki element istnieje w kontenerze w przypadku map wyszukiwanie odbywa się w ten sposób, że najpierw szuka się w kontenerze klucza i dopiero jeżeli żądany klucz istnieje, następuje odwołanie do wartości skojarzonej z tym kluczem 75 Kontenery asocjacyjne set Modeluje tradycyjny zbiór matematyczny, w którym nie mogą pojawić się identyczne wartości. Zawiera składową metodę insert która dodaje element do zbioru, pomijając te wartości, które już w zbiorze są. Kontenery typu set można poddawać operacji sumy zbiorów, iloczynu, różnicy albo weryfikacji zawierania się jednego zbioru w drugim. Ten kontener można wykorzystać do zupełnie innego zadania, np. policzenia wszystkich słów, jakie choć raz pojawiły się w określonym tekście. 76 void wordset(const char* filename) { ifstream source(filename); string word; set<string> words; while(source >> word) words.insert(word); cout << "Liczba różnych słów w tekście:" << words.size() << endl; int main(int argc, char* argv[]) { if(argc > 1) wordset(argv[1]); else wordset("wordset.cpp"); 77 Kontenery asocjacyjne map Przykład: Kontener przechowujący dane studentów: typedef map<string, Student> Studenci; //Studenci mapa elementów Opis studenta pola obiektu typu Student: 1. Nazwisko (pole kluczowe) 2. Wiek (pole opisowe) Kontenery asocjacyjne map class Student { string Nazwisko; int Wiek; public: Student(): Nazwisko("Nowy student"), Wiek(19) { Student(const string& nazwisko, const int wiek): Nazwisko(nazwisko), Wiek(wiek) { Student(const Student& temp): Nazwisko(temp.PobierzNazwisko()), Wiek(temp.PobierzWiek()) { ~Student() { void UstawNazwisko(const string& nazwisko) { Nazwisko = nazwisko; string PobierzNazwisko() const {return Nazwisko; void UstawWiek(const int wiek) { Wiek = wiek; int PobierzWiek() const { return Wiek; Student& operator=(const Student& temp);
7 Kontenery asocjacyjne map Student& Student::operator=(const Student& temp) { Nazwisko = temp.pobierznazwisko(); Wiek = temp.pobierzwiek(); return *this; ostream& operator<<(ostream& osoba, const Student& temp) { osoba << temp.pobierznazwisko() << " ma " << temp.pobierzwiek() << " lat"; return osoba; template<typename T, typename A> void ShowMap(const map<t, A>& v) { for (typename map<t, A>::const_iterator i = v.begin(); i!= v.end(); ++i) cout << i->first << ": " << i->second << "\n"; iter->first wskazuje klucz, a iter->second wskazuje na wartość (obiekt klasy Student) 80 typedef map<string, Student> Studenci; //Studenci mapa elementów int main() { Student Kowalski("Kowalski", 19); Student Nowak("Nowak", 20); Student Adamczewski("Adamczewski", 21); Student Kowalczyk("Kowalczyk", 16); Studenci Rocznik; // dodajemy nowe elementy i nadajemy im wartości Rocznik[Kowalski.PobierzNazwisko()] = Kowalski; Rocznik[Nowak.PobierzNazwisko()] = Nowak; Rocznik[Adamczewski.PobierzNazwisko()] = Adamczewski; Rocznik[Kowalczyk.PobierzNazwisko()] = Kowalczyk; cout << "Rocznik:\n"; ShowMap(Rocznik); // próba odwołania się do nieistniejącego klucza bez przypisania wartości cout << "Wiemy że " << Rocznik["Zeromski"].PobierzNazwisko() << " ma " << Rocznik["Zeromski"].PobierzWiek() << " lat\n"; Co się pojawi na ekranie? 81 Odwołanie się do nieistniejącego klucza Rocznik["Zeromski"].PobierzNazwisko() w przypadku tablicy odwołanie się do nieistniejącego elementu spowoduje błąd, natomiast.. w przypadku mapy nieistniejący element (tj. przypisanie) po prostu się stworzy z wykorzystaniem konstruktora domyślnego : Nazwisko: Nowy student Wiek: 19 Dlatego operator [] nie nadaje się do wyszukiwania istniejących elementów. cout << "Wiemy że " << Rocznik["Zeromski"].PobierzNazwisko() << " ma " << Rocznik["Zeromski"].PobierzWiek() << " lat\n"; Napis w oknie konsoli: Wiemy, że Nowy student ma 19 lat 82 Składowe first i second elementu wskazywanego przez iterator przechowują odpowiednio klucz i wartość elementu, co wynika z definicji typu map::value_type jako synonimu odpowiedniej specjalizacji typu std::pair: typedef pair<const Key, T> value_type; Szablon tworzy kopie wartości składowych, dlatego potrzebny jest konstruktor kopiujący i destruktor dla typu przechowywanych danych. template<typename Type1, typename Type2> struct pair { typedef Type1 first_type; typedef Type2 second_type Type1 first; Type2 second; pair( ); pair( const Type1& Val1, const Type2& Val2 ); template<typename Other1, typename Other2> pair( const pair<other1, Other2>& _Right ); 83 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 dla każdego słowa będzie miała przypisany licznik wystąpień tego słowa. typedef map<string,int> WMap; void wordmap(const char* filename) { ifstream source(filename); string word; WMap words; while(source >> word) words[word]++; // (!) int main(int argc, char* argv[]) { if(argc > 1) wordmap(argv[1]); else wordmap("wordmap.cpp"); for (WMap::iterator w = words.begin(); w!=words.end(); w++) cout << w->first << ":" << w->second << endl; cout << "Liczba różnych słów w tekście:" << words.size() << endl;
8 words[word]++; Wyrażenie inkrementuje wartość typu int skojarzoną z wartością zmiennej word. Jeżeli słowo o wartości word nie występuje w kontenerze, do kontenera jest wstawiana automatycznie para klucz-wartość o kluczu równym word i składowej wartości inicjalizowanej przez wywołanie pseudo-konstruktora int(), zwracającego wartość zero. Jeżeli wiemy, że w tekście wystąpiło słowo np. typedef i chcemy tylko dowiedzieć się, ile razy wystąpiło, można napisać: cout << words["typedef"] << endl; Jeżeli jednak tego słowa nie było w zbiorze słów, poleceniem powyżej zostanie ono dodane. Kontenery asocjacyjne multimap realizuje funkcjonalność kontenera typu map, ale pozwala na przechowywanie wielu elementów o tej samej wartości klucza. To może być przydatne, kiedy realizujemy funkcjonalność w rodzaju np. książki telefonicznej, gdzie jedna osoba może mieć przypisanych kilka numerów telefonu. Przykład: Dana jest baza osób i ich numerów telefonów (bywa, że osoba ma kilka telefonów). Należy wypisać na ekranie wszystkie numery telefonów żądanej osoby multimap<string, string> directory; directory.insert(pair<string, string>("t"," ")); directory.insert(pair<string, string>("t"," ")); directory.insert(pair<string, string>("c"," ")); string str; cout << "Podaj imię: "; cin >> str; multimap<string, string>::iterator p = directory.find(str); if(p!= directory.end()) { do { cout << "Numer telefonu: " << p->second << endl; p++; while(p!= directory.upper_bound(str)); // pierwszy element, // którego klucz jest większy else cout << "Nie ma takiego użytkownika telefonu.\n"; multimap<string, string> directory; directory.insert(pair<string, string>("t"," ")); directory.insert(pair<string, string>("t"," ")); directory.insert(pair<string, string>("c"," ")); string str; cout << "Podaj imię: "; cin >> str; pair<multimap<string, string>::iterator, multimap<string, string>::iterator> ii; ii = directory.equal_range(str); for(multimap<string, string>::iterator it = ii.first; it!= ii.second; ++it) { cout<<"klucz = "<<it->first<<" Wart = "<<it->second<<endl; ii.second wskazuje na pierwszy element po znalezionej sekwencji elementów str. Stosowanie equal_range to pewniejsze rozwiązanie, ponieważ specyfikacja STL nie mówi, że find powinien zawsze dać pierwszy element w serii, ale ten najwcześniej dodany Przykład usuwanie zapisów dla wskazanego użytkownika: multimap<string, string> directory; directory.insert(pair<string, string>("t"," ")); directory.insert(pair<string, string>("t"," ")); directory.insert(pair<string, string>("c"," ")); string str; cout << "Podaj imię: "; cin >> str; pair<multimap<string, string>::iterator, multimap<string, string>::iterator> ii; ii = directory.equal_range(str); directory.erase(ii.first, ii.second); Kontenery asocjacyjne multimap Kontener multimap daje funkcjonalność, którą można uzyskać również w inny sposób, np. implementując mapę wektorów bądź mapę list. Argumenty za multimap: 1. Wektory od razu rezerwują większy blok pamięci, dla zapewnienia jej ciągłości (szybkość dostępu). 2. Czas dostępu do elementów w strukturze kontenera kontenerów jest większy, co ma znaczenie np. przy wielokrotnie powtarzanych odczytach danych z multimapy, chociaż.. przy efektywnej optymalizacji jest możliwość doprowadzenia do stanu, gdzie odczyt mapy kontenerów deque jest szybszy (ale zapis nie)
9 Kontener multiset umożliwia przechowywanie obiektów o powtarzających się wartościach, wszystkie duplikaty są przechowywane w bezpośrednim sąsiedztwie. W przykładzie na następnym slajdzie kontener będzie służył do zliczania wystąpień słów w pliku int main(int argc, char* argv[]) { const char* fname = "main29.cpp"; if(argc > 1) fname = argv[1]; ifstream in(fname); multiset<string> wordmset; string word; while(in >> word) wordmset.insert(word); typedef multiset<string>::iterator MSit; MSit it = wordmset.begin(); while(it!= wordmset.end()) { pair<msit, MSit> p = wordmset.equal_range(*it); int count = distance(p.first, p.second); // funkcja globalna // z biblioteki <iterator> cout << *it << ": " << count << endl; it = p.second; // przesuwamy iterator do następnego słowa
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
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
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
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
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
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 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
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
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
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
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.
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
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ż.
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
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
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)
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,
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
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
obiekty funkcyjne - funktory
#include #include #include #include #include #include #include #include #include #include using namespace
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 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 w języku Java. Kolekcje
Programowanie w języku Java Kolekcje Definicja Kolekcja to obiekt, który grupuje elementy danych (inne obiekty) i pozwala traktować je jak jeden zestaw danych, umożliwiając jednocześnie wykonywanie na
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;
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
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
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ę
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
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
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
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,
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
Programowanie komputerowe. Zajęcia 5
Programowanie komputerowe Zajęcia 5 Tablice wielowymiarowe Tablicę dwuwymiarową możemy deklarować statycznie: typ nazwa[rozmiar1][rozmiar2]; Ma ona elementy nazwa[i][j] dla i=0,,rozmiar1-1, j=0,...,rozmiar2-1.
Wykład 4. Klasa List Kolejki Stosy Słowniki
Wykład 4 Klasa List Kolejki Stosy Słowniki Klasa List Poważną niedogodnością tablic jako kolekcji danych jest fakt, że muszą one mieć stały rozmiar. Programista musi wiedzieć z góry ile miejsca powinien
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
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,
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
Lista, Stos, Kolejka, Tablica Asocjacyjna
Lista, Stos, Kolejka, Tablica Asocjacyjna Listy Lista zbiór elementów tego samego typu może dynamicznie zmieniać rozmiar, pozwala na dostęp do poszczególnych elementów Typowo dwie implementacje: tablicowa,
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
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
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.
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,
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ę
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
Ć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
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
Kompletna dokumentacja kontenera C++ vector w - http://www.cplusplus.com/reference/stl/vector/
STL, czyli o co tyle hałasu W świecie programowania C++, hasło STL pojawia się nieustannie i zawsze jest o nim głośno... często początkujące osoby, które nie znają STL-a pytają się co to jest i czemu go
Szablon klasy std::list
Szablon klasy std::list 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
Zaawansowane programowanie w C++ (PCP)
Wykład 9 - powtórzenie. 11 maja 2007 Powtórzenie materiału obiekty automatyczne, statyczne, tymczasowe, dynamiczne dziedziczenie, agregacja polimorfizm, funkcje wirtualne wzorce projektowe (strukturalne,
Dynamiczne struktury danych
Dynamiczne struktury danych 391 Dynamiczne struktury danych Przez dynamiczne struktury danych rozumiemy proste i złożone struktury danych, którym pamięć jest przydzielana i zwalniana na żądanie w trakcie
Struktury. Przykład W8_1
Struktury Struktury pozwalają na grupowanie zmiennych różnych typów pod wspólną nazwą. To istotnie ułatwia organizacje danych, które okazują się w jednym miejscu kodu programu. To jest bardzo ważne dla
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ęść
Wstęp do wiadomości teoretycznych (nie, nie jest to masło maślane ani wstęp, wstępów proszę cierpliwie czytać)
Języki i Paradygmaty Programowania Laboratorium 1 Obiekty i klasy C++ Wstęp do wiadomości teoretycznych (nie, nie jest to masło maślane ani wstęp, wstępów proszę cierpliwie czytać) UWAGA! Umiejętność tworzenia
Algorytmy i. Wykład 3: Stosy, kolejki i listy. Dr inż. Paweł Kasprowski. FIFO First In First Out (kolejka) LIFO Last In First Out (stos)
Algorytmy i struktury danych Wykład 3: Stosy, kolejki i listy Dr inż. Paweł Kasprowski pawel@kasprowski.pl Kolejki FIFO First In First Out (kolejka) LIFO Last In First Out (stos) Stos (stack) Dostęp jedynie
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
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
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
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
E S - uniwersum struktury stosu
Temat: Struktura stosu i kolejki Struktura danych to system relacyjny r I r i i I U,, gdzie U to uniwersum systemu, a i i - zbiór relacji (operacji na strukturze danych). Uniwersum systemu to zbiór typów
Języki i techniki programowania Ćwiczenia 2
Języki i techniki programowania Ćwiczenia 2 Autor: Marcin Orchel Spis treści: Język C++... 5 Przekazywanie parametrów do funkcji... 5 Przekazywanie parametrów w Javie.... 5 Przekazywanie parametrów w c++...
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
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
Stos LIFO Last In First Out
Stos LIFO Last In First Out Operacje: push - dodanie elementu na stos pop - usunięcie elementu ze stosu empty - sprawdzenie, czy stos jest pusty size - zwrócenie liczby elementów na stosie value (peek)
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ę
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
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
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
Programowanie obiektowe Wykład 3. Dariusz Wardowski. dr Dariusz Wardowski, Katedra Analizy Nieliniowej, WMiI UŁ 1/21
Dariusz Wardowski dr Dariusz Wardowski, Katedra Analizy Nieliniowej, WMiI UŁ 1/21 Przydzielanie pamięci Poniżej przedstawiono w C++ dwie klasy obrazujące sposób rezerwacji pamięci. class Osoba char imie[30];
Techniki programowania INP001002Wl rok akademicki 2018/19 semestr letni. Wykład 3. Karol Tarnowski A-1 p.
Techniki programowania INP001002Wl rok akademicki 2018/19 semestr letni Wykład 3 Karol Tarnowski karol.tarnowski@pwr.edu.pl A-1 p. 411B Plan prezentacji Abstrakcja funkcyjna Struktury Klasy hermetyzacja
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
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
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
Programowanie w C++ Wykład 14. Katarzyna Grzelak. 3 czerwca K.Grzelak (Wykład 14) Programowanie w C++ 1 / 27
Programowanie w C++ Wykład 14 Katarzyna Grzelak 3 czerwca 2019 K.Grzelak (Wykład 14) Programowanie w C++ 1 / 27 Na ostatnim wykładzie: Konstruktor standardowy (domyślny) to taki, który nie ma żadnych argumentów
Temat: Dynamiczne przydzielanie i zwalnianie pamięci. Struktura listy operacje wstawiania, wyszukiwania oraz usuwania danych.
Temat: Dynamiczne przydzielanie i zwalnianie pamięci. Struktura listy operacje wstawiania, wyszukiwania oraz usuwania danych. 1. Rodzaje pamięci używanej w programach Pamięć komputera, dostępna dla programu,
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................................
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
Tworzenie aplikacji w języku Java
Tworzenie aplikacji w języku Java Wykład 2 Java Collections Framework Piotr Czapiewski Wydział Informatyki ZUT 2 października 2009 Piotr Czapiewski (Wydział Informatyki ZUT) Tworzenie aplikacji w języku
Programowanie w C++ Wykład 12. Katarzyna Grzelak. 28 maja K.Grzelak (Wykład 12) Programowanie w C++ 1 / 27
Programowanie w C++ Wykład 12 Katarzyna Grzelak 28 maja 2018 K.Grzelak (Wykład 12) Programowanie w C++ 1 / 27 Klasy cd K.Grzelak (Wykład 12) Programowanie w C++ 2 / 27 Klasy - powtórzenie Klasy typy definiowane
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
C++11. C++ 11 wybrane elementy. C++11: referencje do rvalue C++ 11: C++11: referencje do rvalue. C++11: referencje do rvalue. Referencje do rvalue
C++ 11 wybrane elementy C++11 Lista rozszerzeń C++11 obecnych w VC2013: 1. Referencje do rvalue, 2. Jednolite inicjowanie i delegowanie konstruktorów, 3. Konstruktory delegujące 4. Jednolita inicjalizacja
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
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
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
Programowanie i struktury danych. Wykład 4 Dr Piotr Cybula
Programowanie i struktury danych Wykład 4 Dr Piotr ybula Typ wska ź nikowy int* pointer; //wskaźnik do zmiennych typu int pozwala na dostęp do dowolnego miejsca pamięci (zmienne
Struktury danych: stos, kolejka, lista, drzewo
Struktury danych: stos, kolejka, lista, drzewo Wykład: dane w strukturze, funkcje i rodzaje struktur, LIFO, last in first out, kolejka FIFO, first in first out, push, pop, size, empty, głowa, ogon, implementacja
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
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 w C++ Wykład 11. Katarzyna Grzelak. 13 maja K.Grzelak (Wykład 11) Programowanie w C++ 1 / 30
Programowanie w C++ Wykład 11 Katarzyna Grzelak 13 maja 2019 K.Grzelak (Wykład 11) Programowanie w C++ 1 / 30 Klasy cd K.Grzelak (Wykład 11) Programowanie w C++ 2 / 30 Klasy - powtórzenie Klasy typy definiowane
1. Wartość, jaką odczytuje się z obszaru przydzielonego obiektowi to: a) I - wartość b) definicja obiektu c) typ oboektu d) p - wartość
1. Wartość, jaką odczytuje się z obszaru przydzielonego obiektowi to: a) I - wartość b) definicja obiektu c) typ oboektu d) p - wartość 2. Poprawna definicja wskażnika b to: a) float *a, **b = &a; b) float
Java Collections Framework
Java Collections Framework Co to jest Java Collections Framework JCF Zunifikowana architektura do reprezentacji i manipulacji kolekcjami danych. Składa się z: Interfejsów Definuje abstrakcyjne typy możliwych
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
Wskaźniki. nie są konieczne, ale dają językowi siłę i elastyczność są języki w których nie używa się wskaźników typ wskaźnikowy typ pochodny:
Wskaźniki nie są konieczne, ale dają językowi siłę i elastyczność są języki w których nie używa się wskaźników typ wskaźnikowy typ pochodny: typ nw; /* definicja zmiennej nw typu typ */ typ *w_nw; /* definicja
STL Standard Template Library
Literatura Przykłady: STL Standard Template Library Nicolai M. Josuttis: C++ Standard Library: A tutorial and Reference, 1st, Pearson 1999, (Polska wersja: Nicolai M. Josuttis: C++ Biblioteka standardowa
DYNAMICZNE PRZYDZIELANIE PAMIECI
DYNAMICZNE PRZYDZIELANIE PAMIECI Pamięć komputera, dostępna dla programu, dzieli się na cztery obszary: kod programu, dane statyczne ( np. stałe i zmienne globalne programu), dane automatyczne zmienne
Java: kilka brakujących szczegółów i uniwersalna nadklasa Object
Java: kilka brakujących szczegółów i uniwersalna nadklasa Object Programowanie w językach wysokiego poziomu mgr inż. Anna Wawszczak PLAN WYKŁADU Konstrukcja obiektów Niszczenie obiektów i zwalnianie zasobów
Programowanie obiektowe w C++ Wykład 12
Programowanie obiektowe w C++ Wykład 12 dr Lidia Stępień Akademia im. Jana Długosza w Częstochowie L. Stępień (AJD) 1 / 22 Zakresowe pętle for double tab[5] {1.12,2.23,3.33,4.12,5.22 for(double x: tab)
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
TEMAT : KLASY DZIEDZICZENIE
TEMAT : KLASY DZIEDZICZENIE Wprowadzenie do dziedziczenia w języku C++ Język C++ możliwa tworzenie nowej klasy (nazywanej klasą pochodną) w oparciu o pewną wcześniej zdefiniowaną klasę (nazywaną klasą
Dynamiczny przydział pamięci w języku C. Dynamiczne struktury danych. dr inż. Jarosław Forenc. Metoda 1 (wektor N M-elementowy)
Rok akademicki 2012/2013, Wykład nr 2 2/25 Plan wykładu nr 2 Informatyka 2 Politechnika Białostocka - Wydział Elektryczny Elektrotechnika, semestr III, studia niestacjonarne I stopnia Rok akademicki 2012/2013