Biblioteka standardowa C++

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

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 6. Katarzyna Grzelak. 1 kwietnia K.Grzelak (Wykład 6) Programowanie w C++ 1 / 43

Programowanie i struktury danych

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

STL: Lekcja 1&2. Filozofia STL

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

Kontenery i iteratory. Wykorzystanie kontenerów w praktyce.

Zaawansowane programowanie w C++ (PCP)

Język C++ wykład VIII

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

Zaawansowane programowanie w języku C++ Biblioteka standardowa

Programowanie w C++ Wykład 6. Katarzyna Grzelak. kwiecień K.Grzelak (Wykład 6) Programowanie w C++ 1 / 40

Programowanie w C++ Wykład 8. Katarzyna Grzelak. 7 maja K.Grzelak (Wykład 8) Programowanie w C++ 1 / 31

10.1 Szablony Szablony funkcji Szablony klas Szablony jako wstęp do biblioteki STL... 10

Wzorce funkcji (szablony)

STL Standardt Template Library (wprowadzenie)

Szablon klasy std::vector

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

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

Programowanie Komponentowe Zarządzanie obiektami: kontenery

W przypadku STL w specyfikacji nazwy pliku nagłówkowego brak rozszerzenia tj. <string> <string.h> zamiast

Programowanie obiektowe

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.

obiekty funkcyjne - funktory

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

Programowanie w C++ Wykład 12. Katarzyna Grzelak. 20 maja K.Grzelak (Wykład 12) Programowanie w C++ 1 / 32

Jak Windows zarządza pamięcią?

STL Standard Template Library

Kurs programowania. Wykład 9. Wojciech Macyna

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

Operacje wejścia/wyjścia (odsłona druga) - pliki

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

Programowanie w C++ Wykład 13. Katarzyna Grzelak. 4 czerwca K.Grzelak (Wykład 13) Programowanie w C++ 1 / 26

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

C++: STL. STL: kontenery. STL: kontenery. STL: kontenery. STL: kontenery. Programowanie Obiektowe C++: Standard Template Library

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

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

Programowanie w C++ Wykład 11. Katarzyna Grzelak. 13 maja K.Grzelak (Wykład 11) Programowanie w C++ 1 / 30

C++: STL. STL: kontenery. STL: kontenery. STL: kontenery. STL: kontenery. Programowanie Obiektowe C++: Standard Template Library.

Algorytmy i Struktury Danych.

Programowanie w C++ Wykład 12. Katarzyna Grzelak. 28 maja K.Grzelak (Wykład 12) Programowanie w C++ 1 / 27

Wykorzystanie elementów z biblioteki standardowej C++: vector, list, complex oraz string.

Technologie programowania Wykład 4. Szablony funkcji Notes. Szablony funkcji Notes. Szablony funkcji Notes. Notes. Przemek Błaśkiewicz.

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

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

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

Algorytmika i programowanie. Wykład 2 inż. Barbara Fryc Wyższa Szkoła Informatyki i Zarządzania w Rzeszowie

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

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

Paradygmaty programowania

Kompletna dokumentacja kontenera C++ vector w -

Zaawansowane programowanie w C++ (PCP)

Stos LIFO Last In First Out

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

Operacje wejścia/wyjścia odsłona pierwsza

Zajęcia nr 5 Algorytmy i wskaźniki. dr inż. Łukasz Graczykowski mgr inż. Leszek Kosarzewski Wydział Fizyki Politechniki Warszawskiej

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

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

Programowanie obiektowe - Przykładowe zadania egzaminacyjne (2005/2006)

Dziedziczenie & W slajdach są materiały zapożyczone z

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

Programowanie Obiektowe i C++

Szablon klasy std::list

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

Programowanie w C++ Wykład 3. Katarzyna Grzelak. 12 marca K.Grzelak (Wykład 1) Programowanie w C++ 1 / 35

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 5. Katarzyna Grzelak. 16 kwietnia K.Grzelak (Wykład 1) Programowanie w C++ 1 / 27

Listy i funkcje zaprzyjaźnione w C++

Struktury Danych i Złożoność Obliczeniowa

Język C++ wykład VI. uzupełnienie notatek: dr Jerzy Białkowski. Programowanie C/C++ Język C++ wykład VI. dr Jarosław Mederski.

Szablony klas, zastosowanie szablonów w programach

Dzisiejszy wykład. Wzorce funkcji Wzorce klas Tablica asocjacyjna Składowe statyczne

C-struktury wykład. Dorota Pylak

Operatory na rzecz typu TString

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

Programowanie Obiektowe i C++

Technologie cyfrowe semestr letni 2018/2019

Wstęp do programowania

Ćwiczenia IV - Kontenery (pojemniki)

Stos liczb całkowitych

Wstęp do programowania obiektowego. Przekazywanie parametrów do funkcji w C++ Metody i funkcje operatorowe Strumienie: standardowe, plikowe, napisowe

Krótkie wprowadzenie do STL. XIV LO im. S. Staszica, K06 D

Paradygmaty programowania. Paradygmaty programowania

Wyliczanie wyrażenia obiekty tymczasowe

Składnia C++ Programowanie Obiektowe Mateusz Cicheński

Programowanie w C++ Wykład 9. Katarzyna Grzelak. 14 maja K.Grzelak (Wykład 9) Programowanie w C++ 1 / 30

Programowanie obiektowe i C++ dla matematyków

Część 4 życie programu

wykład IV uzupełnienie notatek: dr Jerzy Białkowski Programowanie C/C++ Język C, a C++. wykład IV dr Jarosław Mederski Spis Język C++ - wstęp

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:

Szablony funkcji i szablony klas

Zaawansowane programowanie w C++ (PCP)

Podstawy algorytmiki i programowania - wykład 4 C-struktury

typ y y p y z łoż o on o e n - tab a lice c e w iel e owym m ar a o r we, e stru r kt k ury

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

Technologie cyfrowe semestr letni 2018/2019

Informatyka. Wy-08 Klasy. mgr inż. Krzysztof Kołodziejczyk

Programowanie obiektowe w C++ Wykład 12

Wstęp do Programowania 2

Transkrypt:

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, etc.) Efektywne i wygodne klasy dla typowych zadań zwiazanych z kolekcjami obiektów. Marcin Benke () Programowanie Obiektowe i C++ 19 grudnia 2005 1 / 27

Pojemniki Pojemnik to obiekt, którego zadaniem jest przechowywanie innych obiektów. W STL pojemniki oparte sa na wzorcach. Rodzaje pojemników (kolekcji) Sekwencyjne (wektor, lista, kolejka) Asocjacyjne (słowniki) Nieuporzadkowane (zbiór, multizbiór) Caveat: STL jest duża i skomplikowana biblioteka, na wykładzie poruszymy tylko najprostsze zagadnienia. Marcin Benke () Programowanie Obiektowe i C++ 19 grudnia 2005 2 / 27

Pojemniki Pojemniki z STL przechowuja kopie obiektów. Obiekty przechowyane musza posiadać odpowiedni konstruktor kopiujacy. Zniszczenie pojemnika pociaga za soba zniszczenie obiektów w nim przechowywanych. Jeśli przechowujemy wskaźniki do obiektów to obiekty wskazywane przez nie nie sa niszczone. Marcin Benke () Programowanie Obiektowe i C++ 19 grudnia 2005 3 / 27

Iteratory Iteratory to obiekty slużace do poruszania się po pojemnikach. Uogólnienie wskaźników Iteratory umożliwiaja Ujednolicenie dostępu do pojemników Równoczesny dostęp do jednego pojemnika przez wiele iteratorów Różne rodzaje dostępu Marcin Benke () Programowanie Obiektowe i C++ 19 grudnia 2005 4 / 27

Intuicja T tab[10]; T* begin = tab; T* end = tab+10; for(t* it=begin; it!= end; it++) f(*it); Chcemy podobnie przechodzić po zawartości pojemnika, nawet jeśli nie jest on tablica: list<t> l; list<t>::iterator it; for(it=l.begin(); it!= l.end(); it++) f(*it); Marcin Benke () Programowanie Obiektowe i C++ 19 grudnia 2005 5 / 27

vector Pojemnik przeznaczony do przechowywania indeksowanych sekwencji (najlepiej o określonym z góry rozmiarze) Dostarcza operacji indeksowania [] i at(), dodania i usuwania elementu na końcu wektora push_back() i pop_back() wydajne o ile nie trzeba zwiększać pojemności, dodania i usuwanie elementu w środku insert() i erase() mało wydajne Marcin Benke () Programowanie Obiektowe i C++ 19 grudnia 2005 6 / 27

Rozmiary Wektor ma zawsze określona pojemność; przy jej przekroczeniu zawartość jest automatycznie kopiowana do większego pojemnika. Informacji o pojemności dostarcza metoda capacity() Informacji o maksymalnej możliwej pojemności dostarcza metoda max_size() (dla G++/Linux 10 9 ) Informacji o liczbie elementów dostarcza metoda size() Możemy z góry zarezerwować pewien rozmiar metoda reserve(rozmiar) Marcin Benke () Programowanie Obiektowe i C++ 19 grudnia 2005 7 / 27

Przykład #include <vector> #include <iostream> using namespace std; int main() { vector<int> v; for(int i=0;i<15;i++) { v.push_back(i); cout <<"Rozmiar "<< v.size() <<" Pojemność: "<< v.capacity()<< endl; Marcin Benke () Programowanie Obiektowe i C++ 19 grudnia 2005 8 / 27

Rozmiar 1 Pojemność: 1 Rozmiar 2 Pojemność: 2 Rozmiar 3 Pojemność: 4 Rozmiar 4 Pojemność: 4 Rozmiar 5 Pojemność: 8 Rozmiar 6 Pojemność: 8 Rozmiar 7 Pojemność: 8 Rozmiar 8 Pojemność: 8 Rozmiar 9 Pojemność: 16 Rozmiar 10 Pojemność: 16 Rozmiar 11 Pojemność: 16 Rozmiar 12 Pojemność: 16 Rozmiar 13 Pojemność: 16 Rozmiar 14 Pojemność: 16 Rozmiar 15 Pojemność: 16 Marcin Benke () Programowanie Obiektowe i C++ 19 grudnia 2005 9 / 27

Zmiany rozmiaru Przekroczenie zarezerwowanego rozmiaru pamięci powoduje Przydzielenie nowego większego rozmiaru pamięci Skopiowanie elementów ze starego przedziału do nowego Zniszczenie starych elementów Dealokację starego obszaru pamięci Jeśli elementy sa duże i maja kosztowne konstruktory i/lub destruktory może to być czasochłonne. Marcin Benke () Programowanie Obiektowe i C++ 19 grudnia 2005 10 / 27

Przechodzenie wektora indeksy typedef vector<int> Liczby; int main() { Liczby v; for(int i=0;i<15;i++) v.push_back(i); for(int i=0;i<v.size();i++) cout << v[i] << endl; Ale jeśli zamienimy wektor na inny pojemnik, to nie zadziała... Marcin Benke () Programowanie Obiektowe i C++ 19 grudnia 2005 11 / 27

Przechodzenie wektora iterator typedef vector<int> Liczby; int main() { Liczby v; for(int i=0;i<15;i++) v.push_back(i); for(liczby::iterator i=v.begin();i<v.end();i++) cout << *i << endl; Ten kod zadziała nawet jeśli zamienimy wektor na inny pojemnik (byle definiował iterator). Marcin Benke () Programowanie Obiektowe i C++ 19 grudnia 2005 12 / 27

Jeszcze o zaletach iteratorów template<class Iterator> void printit(iterator fst, Iterator last, string sep) { for(iterator it=fst; it!= last; it++) cout << *it << sep ; int main() { vector<int> v; for(int i=0;i<15;i++) v.push_back(i); printit(v.begin(),v.end()," ") ; Marcin Benke () Programowanie Obiektowe i C++ 19 grudnia 2005 13 / 27

list Pojemnik przeznaczony do przechowywania sekwencji z wstawianiem/usuwaniem w dowolnym miejscu. Dostarcza operacji dodania i usuwania elementu na końcu push_back() i pop_back() wydajne (tak jak dla wektora), dodania i usuwania elementu na poczatku push_front() i pop_front() wydajne (tak jak dla wektora), dodania i usuwanie elementu w środku insert() i erase() wydajne (inaczej niż dla wektora) Uwaga: nie ma indeksowania! Marcin Benke () Programowanie Obiektowe i C++ 19 grudnia 2005 14 / 27

Przykład #include <list> #include <iostream> using namespace std; int main(){ list<int> v; for(int i=0;i<15;i++) { v.push_front(i); while(v.size()) { cout << v.front()<< ; v.pop_front(); // 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0 W ten sposób mamy stos (LIFO) może się przydać w programie zaliczeniowym. Marcin Benke () Programowanie Obiektowe i C++ 19 grudnia 2005 15 / 27

Przykład #include <list> #include <iostream> using namespace std; int main() { list<int> L; L.push_back(0); L.push_front(1); L.insert(++L.begin(), 2); printit(l.begin(), L.end()," "); // 1 2 0 Marcin Benke () Programowanie Obiektowe i C++ 19 grudnia 2005 16 / 27

deque Double Ended Queue (kolejka o dwóch końcach) Pojemnik przeznaczony do przechowywania indeksowanych sekwencji z wstawianiem/usuwaniem na obu końcach. Dostarcza operacji indeksowania [] i at(), dodania i susuwania elementu na końcu wektora push_back() i pop_back() dodania i usuwania elementu na poczatku push_front() i pop_front() dodania i usuwanie elementu w środku insert() i erase() Marcin Benke () Programowanie Obiektowe i C++ 19 grudnia 2005 17 / 27

Przykład #include <deque> #include <iostream> using namespace std; int main() { deque<int> Q; Q.push_back(3); Q.push_front(1); Q.insert(Q.begin() + 1, 2); Q[2] = 0; // Tu było 3 printit(q.begin(), Q.end()," "); // 1 2 0 Marcin Benke () Programowanie Obiektowe i C++ 19 grudnia 2005 18 / 27

Co możemy przechowywać? Typ elementów T pojemnika powinien implementować co najmniej: takie, że Konstruktor kopiujacy T(const& T) Operator przypisania Operator równości == Operator nierówności!= T a(b); assert(a == b); a = b; assert(a == b); a == a a == b wtw b == a a!= b wtw!(a == b) Marcin Benke () Programowanie Obiektowe i C++ 19 grudnia 2005 19 / 27

set Pojemnik przechowujacy uporzadkowane zbiory elementów. Typ elementu powinien definiować relację (operator) < antyzwrotna antysymetryczna przechodnia Marcin Benke () Programowanie Obiektowe i C++ 19 grudnia 2005 20 / 27

Przykład #include <set> int main() { set<string> indeks; string slowo; while(cin >> slowo){ indeks.insert(slowo) ; printit(indeks.begin(),indeks.end()," "); // Wejście: Ala ma kota kota Ala ma // Wyjście: Ala kota ma Marcin Benke () Programowanie Obiektowe i C++ 19 grudnia 2005 21 / 27

map map<key,value> reprezentuje słownik o kluczach typu key i wartościach typu value. Typ kluczy powinien implementować operację < jak dla set Dostarcza operacji indeksowania, np. map<string,int> slownik; slownik["answer"] = 42; W rzeczywistości przechowywane sa pary, o których można myśleć jako template<class key,class val> struct pair { key first; val second; Marcin Benke () Programowanie Obiektowe i C++ 19 grudnia 2005 22 / 27

Przykład map<string,int> indeks; string slowo; while(cin >> slowo) { if(indeks.count(slowo)) indeks[slowo]++; else indeks[slowo]=1; printit(indeks.begin(),indeks.end()," "); // Wejście: Ala ma kota kota Ala ma kota kota ma // Wyjście: Ala:2 kota:4 ma:3 Marcin Benke () Programowanie Obiektowe i C++ 19 grudnia 2005 23 / 27

Wypisywanie par Tym razem, żeby funkcja printit zadziałała, musimy zdefiniować operator << dla par: template<class key,class val> ostream& operator<<(ostream& os, pair<key,val> p) { os << p.first << : << p.second; return os; Marcin Benke () Programowanie Obiektowe i C++ 19 grudnia 2005 24 / 27

Pojemniki multiset i multimap Warianty set i map, w których elementy (klucze) moga się powtarzać Podobnie jak inne pojemniki asocjacyjne dostarczaja metody count(element), podajacej ilość wystapień elementu (klucza). Dla set i map, metoda count może dać w wyniku tylko 0 lub 1. Marcin Benke () Programowanie Obiektowe i C++ 19 grudnia 2005 25 / 27

Napisy jako strumienie sstream Nagłówek sstream deklaruje klasy pozwalajace na czytanie/pisanie do/z napisów tak jak dla innych strumieni Dla pisania: klasa ostringstream Dla czytania: klasa istringstream Marcin Benke () Programowanie Obiektowe i C++ 19 grudnia 2005 26 / 27

Przykład #include <string> #include <iostream> #include <sstream> using namespace std; int main() { string s("42"); istringstream is(s); int answer; is >> answer; cout << answer << endl ; return 0; Marcin Benke () Programowanie Obiektowe i C++ 19 grudnia 2005 27 / 27