BIBLIOTEKA STANDARDOWA C++

Podobne dokumenty
Podstawy Programowania

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

Podstawy programowania. Wykład: 9. Łańcuchy znaków. dr Artur Bartoszewski -Podstawy programowania, sem 1 - WYKŁAD

dr inż. Jarosław Forenc

STL: Lekcja 1&2. Filozofia STL

Zaawansowane programowanie w języku C++ Biblioteka standardowa

Język C++ wykład VIII

Wykład 1. Program przedmiotu. Programowanie (język C++) Literatura. Program przedmiotu c.d.:

Wykład 1. Program przedmiotu. Programowanie Obiektowe (język C++) Literatura. Program przedmiotu c.d.:

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

Programowanie i struktury danych

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

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

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

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

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

Podstawy programowania. Wykład: 9. Łańcuchy znaków. dr Artur Bartoszewski -Podstawy programowania, sem 1 - WYKŁAD

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

Operatory na rzecz typu TString

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

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

Część 4 życie programu

Podstawy programowania w języku C++

Symfonia C++ standard : programowanie w języku C++ orientowane obiektowo. T. 1 / Jerzy Grębosz. Wyd. 3 C - popr. Kraków, 2015.

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

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

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

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

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

Podstawy programowania

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

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

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

Programowanie Obiektowew języku C++ Zadania L4

Globalne / Lokalne. Wykład 15. Podstawy programowania (język C) Zmienne globalne / lokalne (1) Zmienne globalne / lokalne (2)

Programowanie Obiektowew języku C++ Zadania L4

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

I - Microsoft Visual Studio C++

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

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

Opus Magnum C++11 : programowanie w języku C++. T. 2 / Jerzy Grębosz. Gliwice, cop Spis treści

STL Standardt Template Library (wprowadzenie)

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

Programowanie w językach

1 P roste e t ypy p d a d n a ych c - c ąg ą g d a d l a szy 2 T y T py p z ł z o ł żo ż ne e d a d n a ych c : T BLICE

Programowanie Obiektowo Zorientowane w języku c++ Przestrzenie nazw

Liczby zespolone w języku C (cz.1)

Programowanie obiektowe i C++ dla matematyków

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

Języki i metodyka programowania. Wprowadzenie do języka C

Programowanie w C++ Wykład 5. Katarzyna Grzelak. 16 kwietnia K.Grzelak (Wykład 1) Programowanie w C++ 1 / 27

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

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.

Programowanie w C++ Wykład 1. Katarzyna Grzelak. 26 luty K.Grzelak (Wykład 1) Programowanie w C++ 1 / 28

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

Programowanie proceduralne INP001210WL rok akademicki 2018/19 semestr letni. Wykład 6. Karol Tarnowski A-1 p.

Wprowadzenie do programowania i programowanie obiektowe

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

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

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

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

Łańcuchy znakowe string

IMIĘ i NAZWISKO: Pytania i (przykładowe) Odpowiedzi

Informatyka I. Typy danych. Operacje arytmetyczne. Konwersje typów. Zmienne. Wczytywanie danych z klawiatury. dr hab. inż. Andrzej Czerepicki

Biblioteka obiektowa C++ klasa string - parę przykładów programów Opracowanie: dr hab. Mirosław R. Dudek, prof. UZ

Programowanie 2. Język C++. Wykład 3.

Pliki wykład 2. Dorota Pylak

Programowanie w języku C++

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

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

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

Język C++ zajęcia nr 1

PARADYGMATY PROGRAMOWANIA Wykład 3

Podstawy programowania w C++

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

C++ wprowadzanie zmiennych

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

Listy i funkcje zaprzyjaźnione w C++

Techniki Programowania wskaźniki

#include <stdio.h> int main( ) { int x = 10; long y = 20; double s; s = x + y; printf ( %s obliczen %d + %ld = %f, Wynik, x, y, s ); }

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

Funkcje. czyli jak programować proceduralne. Programowanie Proceduralne 1

Pliki wykład 2 -przekazywanie strumieni do funkcji -funkcje get(char &) i getline(string)

Zad. 5: Układ równań liniowych liczb zespolonych

Programowanie proceduralne INP001210WL rok akademicki 2015/16 semestr letni. Wykład 6. Karol Tarnowski A-1 p.

ZASADY PROGRAMOWANIA KOMPUTERÓW ZAP zima 2015

Kurs programowania. Wykład 9. Wojciech Macyna

Szablon klasy std::vector

Programowanie obiektowe w C++ Wykład 12

Programowanie w C++ Wykład 1. Katarzyna Grzelak. 25 luty K.Grzelak (Wykład 1) Programowanie w C++ 1 / 38

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

FUNKCJE WZORCOWE. Wykład 10. Programowanie Obiektowe (język C++) Funkcje wzorcowe wprowadzenie (2) Funkcje wzorcowe wprowadzenie (1)

Wstęp do programowania. Wykład 1

Biblioteka standardowa - operacje wejścia/wyjścia

Projektowanie klas c.d. Projektowanie klas przykład

Wstęp do programowania INP003203L rok akademicki 2018/19 semestr zimowy. Laboratorium 2. Karol Tarnowski A-1 p.

Wstęp do programowania INP001213Wcl rok akademicki 2017/18 semestr zimowy. Wykład 12. Karol Tarnowski A-1 p.

TEMAT : KLASY POLIMORFIZM

Transkrypt:

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 biblioteki standardowej C++: biblioteka standardowa języka C, STL (Standard Template Library), obsługa strumieni wejścia/wyjścia, udogodnienia dla obliczeń numerycznych, standardowa obsługa błędów, obsługa umiędzynarodowienia. Biblioteka standardowa C++ nie obejmuje m.in.: wspomagania współbieŝności, narzędzi graficznego interfejsu uŝytkownika. Literatura uzupełniająca (Biblioteka standardowa C++) Nicolai M. Josuttis - C++ Biblioteka standardowa. Podręcznik programisty, Helion 2003 Scott Meyers - STL w praktyce. 50 sposobów efektywnego wykorzystania, Helion 2004 Ray Lischner - STL. Leksykon kieszonkowy, Helion 2004 www.sgi.com/tech/stl - Standard Template Library Programer's Guid, Silicon Graphics, Inc. 1993-2006 Tomasz Marks - Wydział MiNI PW -3- Tomasz Marks - Wydział MiNI PW -4-

complex<> Liczby zespolone - klasa complex<> UŜycie pliku nagłówkowego #include <complex> dostarcza definicję klasy (w standardowej przestrzeni nazw std) template <class T> class complex; oraz jej trzy specjalizacje template<> class complex<float>; template<> class complex<double>; template<> class complex<long double>; w celu optymalizacji i zapewnienia bezpieczeństwa konwersji. Tomasz Marks - Wydział MiNI PW -5- Tomasz Marks - Wydział MiNI PW -6- // complex_prog.cpp #include<iostream> #include<complex> using ; complex - przykład uŝycia int main ( ) complex<double> x ( 4., 5. ); complex<float> y ( polar ( 5.0, 0.80) ); cout << "x: " << x << endl; cout << "y: " << y << endl; cout << "x: modul : " << abs(x) << endl << " kwadrat modulu : " << norm(x) << endl << " kat fazy : " << arg(x) << endl; complex - oznaczenia pomocnicze W dalszej części opisu stosowane będą następujące konwencje oznaczeniowe: complex oznacza jeden z typów: complex<float> complex<double> complex<long double> c, c1, c2 - zmienne (obiekty) typu complex d, d1, d2 - wartości rzeczywiste cout << "x += sqrt(y) : " << x += sqrt(y) << endl; k - wartość całkowita Tomasz Marks - Wydział MiNI PW -7- Tomasz Marks - Wydział MiNI PW -8-

complex konstruktory, liczby tymcz. i operatory przypisania Konstruktory: complex c complex c ( d ) complex c ( d1, d2 ) complex c1 ( c2 ) Tymczasowe liczby zespolone: polar ( d ) - liczba tymczasowa o module d i kącie fazy 0; polar ( d1, d2 ) - liczba tymczasowa o module d1 i kącie fazy d2; conj ( c ) - liczba tymczasowa sprzęŝona do c; Operatory przypisania: c1 = c2 c1 += c2 c1 -= c2 c1 *= c2 c1 /= c2 c.real() real(c) c.imag() imag(c) abs(c) norm(c) arg(c) complex dostęp do wartości część rzeczywista część rzeczywista funkcja globalna część urojona część urojona funkcja globalna moduł liczby kwadrat modułu liczby kąt fazy: atan2 ( c.imag(), c.real() ) Tomasz Marks - Wydział MiNI PW -9- Tomasz Marks - Wydział MiNI PW -10- complex porównania Zdefiniowane są następujące operacje porównania: c1 == c2 c == d d == c c1!= c2 c!= d d!= c UWAGA: Inne operacje porównania (n.p. <, >= ) są niezdefiniowane. Tomasz Marks - Wydział MiNI PW -11- complex operatory arytmetyczne Zdefiniowane są następujące operacje arytmetyczne: c1 @ c2 c @ d d @ c gdzie @ oznacza jeden z dwuargumentowych operatorów: + - * / Ponad to: - c + c Tomasz Marks - Wydział MiNI PW -12-

complex funkcje przestępne Zdefiniowane są następujące funkcje przestępne: pow ( c, k ) pow ( c, d ) pow ( d, c ) pow ( c1, c2 ) sqrt ( c ) exp ( c ) log ( c ) log10 ( c ) sin ( c ) cos ( c ) tan ( c ) sinh (c ) cosh ( c ) tanh ( c ) complex strumieniowe operacje we/wy Operator wyjściowy: strm << c zapisuje do strumienia wyjścioweg strm liczbę zespoloną c w postaci: (CzęśćRzeczywista, CzęśćUrojona) --------------------------------------------------------------------------------------------------------------------- Operator wejściowy: strm >> c odczytuje ze strumienia wejścioweg strm liczbę zespoloną c zapisaną w jednej z poniŝszych postaci: (CzęśćRzeczywista, CzęśćUrojona) (CzęśćRzeczywista) CzęśćRzeczywista Tomasz Marks - Wydział MiNI PW -13- Tomasz Marks - Wydział MiNI PW -14- complex konwersje typów Konwersje typów kryją szereg pułapek i dlatego naleŝy korzystać z nich bardzo ostroŝnie. complex<float> zf; complex<double> zd; complex<long double> zld; complex<int> zi; complex<double> zd1 = zf; // O.K. konwersja bezpieczna complex<double> zd2 = zld; // BŁĄD! brak takiej niejawnej konwersji complex<double> zd3(zld); // O.K. konwersja jawna complex<double> zd4 = zi; // BŁĄD! brak takiej niejawnej konwersji complex<double> zd5(zi); // BŁĄD! brak takiej jawnej konwersji complex<double> zd6( zi.real(), zi.imag() ); // O.K. string UWAGA: T1 x; T2 y(x); T1 x; T2 y = x; // uŝywa konwersji jawnej // uŝywa konwersji niejawnej Tomasz Marks - Wydział MiNI PW -15- Tomasz Marks - Wydział MiNI PW -16-

Łańcuchy znakowe klasy..string.. UŜycie pliku nagłówkowego #include <string> dostarcza definicję klasy (w standardowej przestrzeni nazw std) template <class chart, class traits = char_traits<chart>, class Allocator = allocator<chart> > class basic_string; gdzie chart - określa typ danych pojedynczego znaku; traits - definiuje wszystkie operacje na znakach reprezentowanych w klasie chart; Allocator - model pamięci wykorzystywany przez klasę. Łańcuchy znakowe klasy..string.. W pliku string zdefiniowane są dwie specjalizacje klasy basic_string<> : typedef basic_string<char> string; typedef basic_string<wchar_t> wstring; Klasa string zastępuje łańcuchy znakowe języka C. Jest bezpieczna i wygodna w uŝyciu. Przeanalizujemy przykład zaczerpnięty z ksiąŝki Nicolai M. Josuttisa ( str. 437 ) - "Pobieranie słów i wypisywanie ich w odwrotnej kolejności" [znaków]. Tomasz Marks - Wydział MiNI PW -17- Tomasz Marks - Wydział MiNI PW -18- // string2.cpp #include<iostream> #include<string> using ; int main ( int argc, char** argv ) const string delims(" \t,.;"); string line; // dla kaŝdego prawidłowo odczytanego wiersza while ( getline( cin, line) ) string::size_type begind, endind; // odszukaj początek pierwszego słowa begind = line.find_first_not_of( delims ); string - przykład uŝycia (1) // jeŝeli odnaleziono początek słowa while ( begind!= string::npos ) // odszukaj koniec słowa endind = line.find_first_of( delims, begind ); if ( endind == string::npos ) // koniec słowa jest jednocześnie końcem wiersza endind = line.length(); // wypisz znaki w odwrotnej kolejności for ( int i = endind-1; i >= static_cast<int>(begind); --i ) cout << line[ i ]; cout << ' '; // odszukaj początek kolejnego słowa begind = line.find_first_not_of( delims, endind ); cout << endl; Tomasz Marks - Wydział MiNI PW -19- // string2.cpp #include<iostream> #include<string> using ; int main ( int argc, char** argv ) const string delims(" \t,.;"); string line; string - przykład uŝycia (2) // dla kaŝdego prawidłowo odczytanego wiersza while ( getline( cin, line) ) string::size_type begind, endind; // odszukaj początek pierwszego słowa begind = line.find_first_not_of( delims );.... cout << endl; Tomasz Marks - Wydział MiNI PW -20-

string - przykład uŝycia (3) // jeŝeli odnaleziono początek słowa while ( begind!= string::npos ) // odszukaj koniec słowa endind = line.find_first_of( delims, begind ); if ( endind == string::npos ) // koniec słowa jest jednocześnie końcem wiersza endind = line.length(); // wypisz znaki w odwrotnej kolejności for ( int i = endind-1; i >= static_cast<int>(begind); --i ) cout << line[ i ]; cout << ' '; // odszukaj początek kolejnego słowa begind = line.find_first_not_of( delims, endind );.. Operacje Konstruktory Destruktor =, assign() swap() +=, append(), push_back() insert() erase() clear() resize() string operacje (1) Wyniki tworzą lub kopiują łańcuch znakowy usuwa łańcuch znakowy przypisuje nową wartość zamienia wartości pomiędzy dwoma łańcuchami dołącza znaki na końcu łańcucha wstawia znaki usuwa znaki usuwa wszystkie znaki (czyści łańcuch) zmienia liczbę znaków (dołącza lub usuwa końcowe znaki) Tomasz Marks - Wydział MiNI PW -21- Tomasz Marks - Wydział MiNI PW -22- string operacje (2) string operacje (3) Operacje Wyniki Operacje Wyniki replace() zastępuje znaki >>, getline() odczyt ze strumienia + konkatenacja << zapis do strumienia ==,!=, <, <=, >, >=, compare() size(), length() max_size() empty() capacity() reserve() porównania zwraca aktualną liczbę znaków zwraca maksymalną moŝliwą liczbę znaków bool czy dany łańcuch jest pusty? zwraca maksymalną moŝliwą liczbę znaków, która moŝe być przechowywana bez ponownej alokacji pamięci rezerwuje pamięć na określoną liczbę znaków copy() c_str() data() substr() funkcje przeszukiwania begin(), end() rbegin(), rend() kopiuje string do łańcucha znakowego języka C zwraca wartość jako łańcuch znakowy języka C zwraca wartość w postaci tablicy znaków zwraca określony fragment łańcucha znakowego poszukują określonego łańcucha znakowego lub znaku obsługa iteratorów normalnych obsługa iteratorów odwrotnych [ ], at() umoŝliwia dostęp do znaku Tomasz Marks - Wydział MiNI PW -23- Tomasz Marks - Wydział MiNI PW -24-

Koniec wykładu 11. Tomasz Marks - Wydział MiNI PW -25-