Zaawansowane programowanie w języku C++ Biblioteka standardowa



Podobne dokumenty
Programowanie i struktury danych

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

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

Podstawy Programowania

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

dr inż. Jarosław Forenc

Zaawansowane programowanie w języku C++ Przeciążanie operatorów

STL: Lekcja 1&2. Filozofia STL

Zaawansowane programowanie w języku C++ Funkcje uogólnione - wzorce

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

Zaawansowane programowanie w języku C++ Zarządzanie pamięcią w C++

Język C++ wykład VIII

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.

STL Standardt Template Library (wprowadzenie)

Laboratorium 1. Programowanie II - Kierunek Informatyka. dr inż. Janusz Słupik. Gliwice, Wydział Matematyki Stosowanej Politechniki Śląskiej

Zaawansowane programowanie w języku C++ Wyjątki

Zaawansowane programowanie w języku C++ Programowanie obiektowe

Operatory na rzecz typu TString

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

PROE wykład 3 klasa string, przeciążanie funkcji, operatory. dr inż. Jacek Naruniec

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

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

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++

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

Zaawansowane programowanie w C++ (PCP)

Zaawansowane programowanie w języku C++ Klasy w C++

Programowanie Komponentowe Zarządzanie obiektami: kontenery

Systemy operacyjne na platformach mobilnych 2 Programowanie aplikacji z graficznym interfejsem użytkownika w GTK+

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

Jak Windows zarządza pamięcią?

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

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

Języki programowania obiektowego Nieobiektowe elementy języka C++

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

Programowanie obiektowe

Języki programowania. Przetwarzanie tablic znaków. Część druga. Autorzy Tomasz Xięski Roman Simiński

obiekty funkcyjne - funktory

Podstawy programowania

Podstawy Informatyki. Inżynieria Ciepła, I rok. Wykład 10 Kurs C++

Biblioteka standardowa C++

Kontenery i iteratory. Wykorzystanie kontenerów w praktyce.

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

Podstawy programowania w języku C++

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

BIBLIOTEKA STANDARDOWA C++

STL Standard Template Library

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

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

Układy reprogramowalne i SoC Implementacja w układach FPGA

Program dopisujący gwiazdkę na końcu pliku tekstowego o nazwie podanej przez uŝytkownika oraz wypisujący zawartość tego pliku.

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

STL Standard Template Library

DANE TEKSTOWE W JĘZYKU C/C++ - TABLICE ZNAKOWE

Architektura komputerów Wprowadzenie do algorytmów

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

Paradygmaty programowania

Algorytmy i Struktury Danych.

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

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

Kurs programowania. Wykład 9. Wojciech Macyna

Klasa std::string. Bogdan Kreczmer. ZPCiR IIAiR PWr pokój 307 budynek C3.

#include <iostream> #include <string> using namespace std; auto main() -> int { string s1; // pusty string. Klasa std::string

Szablon klasy std::vector

Programowanie w języku C++

Programowanie w C++ Wykład 8. Katarzyna Grzelak. 15 kwietnia K.Grzelak (Wykład 8) Programowanie w C++ 1 / 33

Programowanie w językach

Programowanie obiektowe w C++ Wykład 11

Ćwiczenie nr 6. Poprawne deklaracje takich zmiennych tekstowych mogą wyglądać tak:

Listy i funkcje zaprzyjaźnione w C++

Systemy operacyjne na platformach mobilnych 2 Podstawy obsługi powłoki Bash

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

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

Podstawy programowania w języku C++

PARADYGMATY PROGRAMOWANIA Wykład 3

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:

Programowanie obiektowe i C++ dla matematyków

Materiał Typy zmiennych Instrukcje warunkowe Pętle Tablice statyczne Wskaźniki Tablice dynamiczne Referencje Funkcje

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

Część 4 życie programu

Zaawansowane programowanie w języku C++ Wstęp

Wstęp do programowania. Dariusz Wardecki, wyk. X

Wskaźnik może wskazywać na jakąś zmienną, strukturę, tablicę a nawet funkcję. Oto podstawowe operatory niezbędne do operowania wskaźnikami:

// Potrzebne do memset oraz memcpy, czyli kopiowania bloków

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

Pliki wykład 2. Dorota Pylak

Programowanie i struktury danych

Podstawy informatyki. Informatyka stosowana - studia niestacjonarne. Grzegorz Smyk. Wydział Inżynierii Metali i Informatyki Przemysłowej

Programowanie w C++ Wykład 2. Katarzyna Grzelak. 4 marca K.Grzelak (Wykład 1) Programowanie w C++ 1 / 44

Programowanie w C++ Wykład 2. Katarzyna Grzelak. 5 marca K.Grzelak (Wykład 1) Programowanie w C++ 1 / 41

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

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

Wprowadzenie do programowania i programowanie obiektowe

Projektowanie klas c.d. Projektowanie klas przykład

Informatyka. Wy-03 Dynamiczna alokacja pamięci, wyjątki. mgr inż. Krzysztof Kołodziejczyk

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

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

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

Transkrypt:

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 bez ograniczeń - zintegrowany rozwój Politechniki Łódzkiej - zarządzanie Uczelnią, nowoczesna oferta edukacyjna i wzmacniania zdolności do zatrudniania osób niepełnosprawnych Prezentacja dystrybuowana jest bezpłatnie Politechnika Łódzka, ul. Żeromskiego 116, 90-924 Łódź, tel. (042) 631 28 83 w ramach Europejskiego www.kapitalludzki.p.lodz.pl Funduszu Społecznego

Biblioteka standardowa Po co definiować i standaryzować bibliotekę języka programowania? Składniki biblioteki standardowej języka C++: Łańcuch znaków Realizacja funkcji wejścia-wyjścia Kontenery (struktury danych) Algorytmy Wspomaganie operacji numerycznych Wsparcie dla międzynarodowych wersji programów 2

Przestrzeń nazw std Biblioteka standardowa języka C++ została zdefiniowana w przestrzeni nazw std std::cout << "hello" << std::endl; using std::cout; using std::endl; cout << "hello" << endl; using namespace std; cout << "hello" << endl; 3

Pliki nagłówkowe Biblioteka standardowa języka C w bibliotece języka C++ (wybrane pliki): #include<cstdlib> #include<cstdio> #include<cstring> #include<ctime> Biblioteka standardowa języka C++ (wybrane pliki): #include<string> #include<new> #include<vector> #include<complex> 4

Ciągi znaków - napisy Ciągi znaków języka C: #include<string.h> char str[100]; strncpy( str, "hello", 100 ); Ciągi znaków języka C++: #include<string> std::string str; str = "hello"; 5

Ciąg znaków języka C #include<string.h> memcpy, strcpy, strlen char str[100]; strncpy( str, "hello", 100 ); H E L L O \0?? 0 99 strlen( str ); sizeof( str ) / sizeof( str[0] ) 6

Ciąg znaków języka C++ Klasa std::string Podstawowe metody klasy std::string empty() size(), length() at(), operator[] clear(), erase() find() swap() substr() append() c_str() 7

Klasa std::string a ciągi znaków języka C Klasa std::string: Ciągi znaków języka C: strcpy( a, b ) strcmp( a, b ) strcat( a, b ) strlen( a ) a = b a == b a += b a.size() strstr( a, b ) a.find( b ) 8

Klasy wejścia-wyjścia języka C++ Nagłówek iostream Nagłówki istream, ostrem Obiekty: cout, cin, cerr, clog Nagłówek fstream Nagłówki ifstream, ofstream 9

Omówienie biblioteki standardowej C++ Reference: http://www.cplusplus.com/reference/ http://www.cppreference.com/wiki/ http://gcc.gnu.org/onlinedocs/libstdc++/ http://en.wikipedia.org/wiki/c%2b%2b_standard_library http://www.parashift.com/c++-faq-lite/containers.html http://www.parashift.com/c++-faq-lite/class-libraries.html 10

Porównanie podstawowych kontenerów Wektor (std::vector) Model tablicy dynamicznej Swobodny dostęp do elementów Kolejka typu LIFO Kolejka o dwóch końcach (std::deque) Model tablicy dynamicznej otwartej z obydwu końców Kolejka typu FIFO Lista (std::list) Model listy dwukierunkowej Wstawianie i usuwanie elementów jest szybkie i stałe w czasie Brak swobodnego dostępu do elementów konieczna iteracja 11

Wektor model pamięci Wektor najczęściej implementowany jest jako tablica dynaczmina: Oczekuje się, że będzie spełnione wyrażenie: &v[ i ] == &v[ 0 ] + i Plusy/minusy? 12

Kolejka model pamięci Implementowana zazwyczaj jako grupa pojedynczych bloków Plusy/minusy? 13

Lista model pamięci Plusy/minusy? 14

Iteratory W bibliotece standardowej C++ iterator jest: Inteligentnym wskaźnikiem Implementuje operację de-referencji (*) Implementuje operację inkrementacji (++) Pozwala na dostęp do elementów danego kontenera bez znajomości jego budowy Iterator jest obiektem, który wskazuje na inny obiekt Kontenery implementują: Metody: begin(), end(), rbegin(), rend() Obiekty: iterator, reverse_iterator, const_iterator, const_reverse_terator 15

Testowane operacje Utworzenia kontenera i wypełnienia go obiektami testowymi Domyślny konstruktor + metoda push_back Sortowania obiektów przechowywanych w kontenerze Funkcja sort() z biblioteki algorithm Dostępu do obiektów przechowywanych w kontenerze w trybie do odczytu Iterator const_iterator Dodawanie zbioru obiektów do istniejącego kontenera Metoda insert() 16

Utworzenie kontenera procedura testowa template<class T> void con_create(unsigned int size) { struct timeval start, end; T con; gettimeofday(&start, NULL); for (unsigned int i=0; i<size; ++i) { con.push_back(string("test")); } gettimeofday(&end, NULL); unsigned long t = (end.tv_sec*1000000 + end.tv_usec) (start.tv_sec*1000000 + start.tv_usec); cout << size << "\t" << t << endl; } 17

Utworzenie kontenera zestawienie wyników Liczba elementów: vector [us]: deque [us]: list [us]: 10 35 12 15 100 34 24 36 1000 280 229 349 10000 3022 2174 3682 100000 29728 21810 37931 1000000 295685 219169 380891 10000000 3150320 2402150 3774683 18

Utworzenie kontenera graficzna prezentacja Dodawanie elementów 10000000 Czas [us] 1000000 100000 10000 1000 vector deque list 100 10 1 10 100 1000 10000 100000 1000000 10000000 Liczba elementów [n] 19

Sortowanie kontenera procedura testowa template<class T> void con_sort(unsigned int size) { struct timeval start, end; T con; for (unsigned int i=0; i<size; ++i) { con.push_back( string(lexical_cast<string>(size/(i+1)))); } gettimeofday(&start, NULL); sort(con.begin(), con.end()); gettimeofday(&end, NULL); unsigned long t = (end.tv_sec*1000000 + end.tv_usec) (start.tv_sec*1000000 + start.tv_usec); cout << size << "\t" << t << endl; } 20

Sortowanie listy procedura testowa template<> void con_sort<list<string> >(unsigned int size) { struct timeval start, end; list<string> con; for (unsigned int i=0; i<size; ++i) { con.push_back( string(lexical_cast<string>(size/(i+1)))); } gettimeofday(&start, NULL); con.sort(); gettimeofday(&end, NULL); unsigned long t = (end.tv_sec*1000000 + end.tv_usec) (start.tv_sec*1000000 + start.tv_usec); cout << size << "\t" << t << endl; } 21

Sortowanie kontenera zestawienie wyników Liczba elementów: vector [us]: deque [us]: list [us]: 10 13 11 24 100 57 78 70 1000 664 823 684 10000 8882 11167 8185 100000 108732 138821 93053 1000000 1302338 1675550 1001823 10000000 15797412 20170507 11177318 22

Sortowanie kontenera graficzna prezentacja Sortowanie elementów 100000000 Czas [us] 10000000 1000000 100000 10000 1000 vector deque list 100 10 1 10 100 1000 10000 100000 1000000 10000000 Liczba elementów [n] 23

Dostęp do elementów procedura testowa template<class T> void con_access_read(unsigned int size) { struct timeval start, end; T con(size); for (unsigned int i=0; i<size; ++i) con.push_back(string("test")); gettimeofday(&start, NULL); typename T::const_iterator i; for (i=con.begin(); i!=con.end(); ++i) { string buf = *i; } gettimeofday(&end, NULL); unsigned long t = (end.tv_sec*1000000 + end.tv_usec) (start.tv_sec*1000000 + start.tv_usec); cout << size << "\t" << t << endl; } 24

Dostęp do elementów zestawienie wyników Liczba elementów: vector [us]: deque [us]: list [us]: 10 3 3 3 100 12 11 12 1000 95 94 101 10000 933 915 1012 100000 9567 9538 10782 1000000 95766 95028 109020 10000000 950301 949429 1109043 25

Dostęp do elementów graficzna prezentacja Odczyt elementów 10000000 Czas [us] 1000000 100000 10000 1000 vector deque list 100 10 1 10 100 1000 10000 100000 1000000 10000000 Liczba elementów [n] 26

Dodawanie elementów procedura testowa template<class T> void con_insert(unsigned int size) { struct timeval start, end; T con(size); for (unsigned int i=0; i<size; ++i) { con.push_back(string("test")); } string buf = "test"; gettimeofday(&start, NULL); typename T::iterator i=con.begin(); ++i; ++i; con.insert(i, 10, buf); gettimeofday(&end, NULL); unsigned long t = (end.tv_sec*1000000 + end.tv_usec) (start.tv_sec*1000000 + start.tv_usec); cout << size << "\t" << t << endl; } 27

Dodawanie elementów zestawienie wyników Liczba elementów: vector [us]: deque [us]: list [us]: 10 4 6 4 100 12 4 4 1000 75 3 3 10000 773 4 4 100000 8147 10 7 1000000 81969 11 7 10000000 810680 11 7 28

Dodawanie elementów graficzna prezentacja Wstawianie elementów 1000000 Czas [us] 100000 10000 1000 vector deque list 100 10 1 10 100 1000 10000 100000 1000000 10000000 Liczba elementów [n] 29

Wnioski 30

Pozostałe przydatne kontenery Kontener std::set Kontener std::map 31

Narzędzia Plik nagłówkowy utlity: pair make_pair Plik nagłówkowy memory: auto_ptr Plik nagłówkowy limits: numeric_limits 32

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 bez ograniczeń - zintegrowany rozwój Politechniki Łódzkiej - zarządzanie Uczelnią, nowoczesna oferta edukacyjna i wzmacniania zdolności do zatrudniania osób niepełnosprawnych Prezentacja dystrybuowana jest bezpłatnie Politechnika Łódzka, ul. Żeromskiego 116, 90-924 Łódź, tel. (042) 631 28 83 w ramach Europejskiego www.kapitalludzki.p.lodz.pl Funduszu Społecznego