STL: Lekcja 1&2. Filozofia STL

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

Programowanie i struktury danych

Język C++ wykład VIII

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

Jak Windows zarządza pamięcią?

Zaawansowane programowanie w języku C++ Biblioteka standardowa

Kontenery i iteratory. Wykorzystanie kontenerów w praktyce.

dr inż. Jarosław Forenc

Podstawy Programowania

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

Programowanie komputerowe. Zajęcia 5

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

STL Standardt Template Library (wprowadzenie)

Zaawansowane programowanie w C++ (PCP)

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

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.

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

Szablon klasy std::vector

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

Kompletna dokumentacja kontenera C++ vector w -

Algorytmy i Struktury Danych.

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źnik może wskazywać na jakąś zmienną, strukturę, tablicę a nawet funkcję. Oto podstawowe operatory niezbędne do operowania wskaźnikami:

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

Techniki Programowania wskaźniki

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

Paradygmaty programowania

> C++ dynamiczna alokacja/rezerwacja/przydział pamięci. Dane: Iwona Polak. Uniwersytet Śląski Instytut Informatyki

Programowanie Komponentowe Zarządzanie obiektami: kontenery

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

Zajęcia nr 2 Programowanie strukturalne. dr inż. Łukasz Graczykowski mgr inż. Leszek Kosarzewski Wydział Fizyki Politechniki Warszawskiej

Biblioteka standardowa C++

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

TEMAT : KLASY POLIMORFIZM

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

Programowanie komputerowe. Zajęcia 4

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

Operatory na rzecz typu TString

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

Wstęp do programowania obiektowego. WYKŁAD 3 Dziedziczenie Pola i funkcje statyczne Funkcje zaprzyjaźnione, this

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

Część 4 życie programu

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

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

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

> C++ wskaźniki. Dane: Iwona Polak. Uniwersytet Śląski Instytut Informatyki 26 kwietnia 2017

Podstawy informatyki. Elektrotechnika I rok. Język C++ Operacje na danych - wskaźniki Instrukcja do ćwiczenia

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

Wstęp do informatyki- wykład 12 Funkcje (przekazywanie parametrów przez wartość i zmienną)

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

Lab 9 Podstawy Programowania

Podstawy języka C++ Maciej Trzebiński. Praktyki studenckie na LHC IFJ PAN. Instytut Fizyki Jądrowej Polskiej Akademii Nauk. M. Trzebiński C++ 1/16

Podstawy programowania w języku C++

Projektowanie klas c.d. Projektowanie klas przykład

Języki i metodyka programowania. Wskaźniki i tablice.

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

Szablony funkcji i klas (templates)

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

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

Listy i funkcje zaprzyjaźnione w C++

JĘZYKI PROGRAMOWANIA Z PROGRAMOWANIEM OBIEKTOWYM. Wykład 6

BIBLIOTEKA STANDARDOWA C++

DYNAMICZNE PRZYDZIELANIE PAMIECI

1 Wskaźniki. 1.1 Główne zastosowania wskaźników

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

Programowanie komputerowe. Zajęcia 1

Programowanie - wykład 4

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

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

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

tablica: dane_liczbowe

Konwersje napis <-> liczba Struktury, unie Scanf / printf Wskaźniki

Wstęp do programowania

TEMAT : KLASY DZIEDZICZENIE

Typy wyliczeniowe Konwersje napis <-> liczba Struktury, unie Scanf / printf Wskaźniki

Programowanie i struktury danych

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

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

Strona główna. Strona tytułowa. Programowanie. Spis treści. Sobera Jolanta Strona 1 z 26. Powrót. Full Screen. Zamknij.

Podstawy programowania w języku C++

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

C++ wprowadzanie zmiennych

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

Algorytmy i Struktury Danych. Anna Paszyńska

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

Podstawy programowania. Wykład PASCAL. Zmienne wskaźnikowe i dynamiczne. dr Artur Bartoszewski - Podstawy prograowania, sem.

1. Pierwszy program. Kompilator ignoruje komentarze; zadaniem komentarza jest bowiem wyjaśnienie programu człowiekowi.

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

Pytania sprawdzające wiedzę z programowania C++

1 Wskaźniki i zmienne dynamiczne, instrukcja przed zajęciami

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

KURS C/C++ WYKŁAD 6. Wskaźniki

Wyjątki (exceptions)

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

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

ZASADY PROGRAMOWANIA KOMPUTERÓW

I - Microsoft Visual Studio C++

Transkrypt:

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. Filozofia STL STL (ang. Standard Template Library) czyli biblioteka standardowa. STL jest pewną częścią biblioteki standardowej C++, jednak nie całą. Dobrze jest się go nauczyć zaraz po samej nauce czystego C++. Po co nam STL? Przede wszystkim po to, by nie odkrywać niektórych rzeczy na nowo. Są w niej zawarte wzorce konkretnych komponentów, które mogą być szeroko wykorzystywane na wielu platformach. Zawartość STL W STL'u zawarte są: kontenery - Kontener (lub inaczej pojemnik, ang. container, collection) to struktura danych, której zadaniem jest przechowywanie w zorganizowany sposób zbioru danych (obiektów). Kontener zapewnia narzędzia dostępu, w tym dodawanie, usuwanie i wyszukiwanie danej (obiektu) w kontenerze. W zależności od przyjętej organizacji, poszczególne kontenery różnią się wydajnością poszczególnych operacji. Mamy dwa typy kontenerów: kontenery i kontenery asocjacyjne. iteratory - W programowaniu obiektowym iteratorem nazywamy obiekt pozwalający na sekwencyjny dostęp do wszystkich elementów lub części zawartych w innym obiekcie, zwykle kontenerze lub liście. Iterator jest czasem nazywany kursorem, zwłaszcza w zastosowaniach związanych z bazami danych. algorytmy dobrze znana nam nazwa, w STL'u odgrywa rolę taką, że są to funkcje, które mają wykonywać pewne abstrakcyjne działania. Przykłady kontenerów: Kontenery Vector List Deque Kontenery asocjacyjne Set Map Multimap Multiset Zanim zaczniemy podróż po krainie STL... Wskaźniki: Element, który pokazuje na inną zmienną i zawiera adres do elementu na który pokazuje. Definicja wskaźnika wygląda następująco: TYP *nazwa_zmiennej; Przykłady: int *x; x jest zmienną wskaźnikową zawierającą adres do zmiennych typu całkowitego double *y; - y jest zmienną wskaźnikową zawierającą adres do typu zmiennoprzecinkowego

int *w; /* wskaźnik na zmienną typu int */ int a = 100; int b; w = &a; /* wskaźnik 'w' wskazuje na zmienną typu int 'a' */ b = *w; /* przypisz zmiennej 'b' wartość spod adresu wskazywanego przez 'w'; teraz 'b' równe jest 100 */ Powyższe działanie nazywamy wyłuskiwaniem lub adresowaniem pośrednim pobranie adresu zmiennej i przypisanie go pod zmienną wskaźnikową. Iteratory: Iteratory zostały stworzone z myślą o pracy na kontenerach. (tj. np. Vector, List). Umożliwiają docieranie do interesujących nas elementów bez znajomości struktury danego obiektu. Iteratory to pewien rodzaj wskaźników, przy czym w przypadku iteratorów nie musimy martwić się o przejście zakresu pojemnika oraz o to, czy poprawnie wskazuje na interesujący nas element. Na ryzie tyle o iteratorach. Więcej o nich porozmawiamy w przypadku konkretnego kontenera wektora. Operacje na tekstach klasa String Zanim przejdziemy do czystych struktur STL zajmiemy się klasą String, czyli klasą, która pozwoli nam manipulować łancuchami (napisami). W przypadku wszystkich elementów STL'a będziemy zawsze na samym początku wykorzystywać następującą deklarację: #include <string> W tym momencie do naszego programu obok takich rzeczy, jak iostream dołączyliśmy obsługę napisów. Teraz w głównym programie możemy zadeklarować zmienne typu łańcuchowego. Wygląda to w następujący sposób: string s; string k,l,m; itd. Ponadto możemy stworzyć taki łańcuch o określonej długości i/lub zawartości. Np. string s(10, K ); Gdy wyświetlimy zawartość zmiennej s na ekranie pojawi się: KKKKKKKKKK. Kolejnym ważnym elementem jest to, że na stringach możemy wykonywać podobne czynności jak w przypadku liczb: +,==,+=,!= oraz do poszczególnych zawartości łańcucha odwołujemy się jak do tablicy tj. nazwa_stringu[index_elementu]; Jak widać manipulacje obiektami string są bardzo wygodne. Oprócz wygodnych w stosowaniu operatorów klasa string posiada jeszcze więcej metod. Metoda empty() size(),length() at() Opis Zwraca wartość true jeżeli napis jest pusty. Zwraca ilość znaków w napisie. Zwraca znak o podanym położeniu, podobnie jak operator [] z tym że ta metoda jest bezpieczniejsza, zapobiega wyjściu poza zakres.

clear(),erase() Usuwa wszystkie znaki z napisu, erase() może usuwać wybrane znaki. find() Znajduje podciąg w ciągu, są też bardziej rozbudowane funkcje tego typu. swap() Zamienia miejscami dwa stringi, a staje sie b, a b staje sie a. append() Dodaje zadany napis na końcu istniejącego ciągu. c_str() Zwraca napis w stylu języka C (stały wskaźnik do pierwszego elementu). Vector nowe spojrzenie na tablicę Klasa Vector reprezentuje klasyczną tablicę standardową. Możemy tworzyć wektory dowolnych typów. Aby zacząć korzystać z wektorów, w nagłówku należy napisać: #include <vector> Od tego momentu mamy możliwość tworzyć obiekty klasy vector. Aby utworzyć taki obiekt, stosuje się jedną z metod. Przykłady: vector < typ_elemetow > nazwa_tablicy; - definicja vector < int > tab(20); - utwórz wektor typu całkowitego o nazwie tab i rozmiarze 20. vector < string > tablica( 20, "przykladowy tekst dla kazdego elementu"); - utwórz wektor typu łańcuchowego o nazwie tablica, rozmiarze 20 i dla każdego elementu przypisz tekst przykladowy tekst dla kazdego elementu Uwaga, teraz jedna z ciekawszych rzeczy przy deklaracji wektorów nie trzeba podawać jego rozmiaru! Nasz wektor będzie się dostosowywał wielkością do ilości elementów wprowadzanych do niego. Kiedy mamy już taki wektor, czas na manipulacje nim. Z pomocą do pracy nad nimi przychodzą iteratory. kontener<typ_kontenera>::iterator nazwa_iteratora; - definicja W przypadku pracy na kontenerach zazwyczaj tworzymy sobie dwa iteratory jeden, który wskazuje na pierwszy element i drugi wskazujący na ostatni element. vector<string>::iterator iter1; vector<string>::iterator iter2; iter1 = tabstr.begin(); iter2 = tabstr.end(); Z iteratorów możemy korzystać jak ze zwykłych wskaźników możemy wykonywać operacje arytmetyczne, logiczne, a ponadto jeszcze używać [] jak w przypadku tablic. #include <string> #include <iostream> #include <vector> using namespace std;

int main() { vector<string> tabstr(10,"0"); vector<string>::iterator iter1; vector<string>::iterator iter2; iter1 = tabstr.begin(); iter2 = tabstr.end(); for (int a = 0; iter1!= iter2; ++iter1, ++a ) { if (a % 2 == 0) *iter1 = "1"; cout << *iter1 << endl; } return 0; } Operacje na wektorach: operacje void swap(vector vec) size_t size() size_t capacity() size_t max_size() bool empty() void reserve(size_t n) void resize(size_t n, T obj) void resize(size_t n) void push_back(const T obj) void pop_back() czasie) opis działania zamienia zawartości dwóch wektorów miejscami (wykonywane szybko, w stałym czasie) zwraca obecną ilość elementów wektora. zwraca ilość elementów, którą wektor jest w stanie pomieścić przed przeniesieniem go do większego obszaru pamięci. zwraca ilość elementów, którą maksymalnie może pomieścić wektor zwraca true jeśli wektor nie przechowuje żadnych zmiennych rezerwuje pamięć na n elementów, co zapobiega przenoszeniu wektora w pamięci przed osiągnięciem tej liczby zmienia rozmiar wektora do n; jeśli jest większy od obecnego, dodawane są nowe elementy będące kopiami obj zmienia rozmiar wektora do n; jeśli jest większy od obecnego, dodawane są nowe elementy o przypadkowych wartościach dodaje na końcu wektora kopię przekazanego argumentu usuwa ostatni element z wektora (wykonywane w stałym

void clear() void assign(size_t n, const T obj) usuwa wszystkie elementy z wektora czyści wektor i wypełnia go n kopiami argumentu obj iterator assign(iterator poczatek, iterator koniec) czyści wektor i wypełnia go elementami z innego wektora z przedziału <poczatek;koniec> iterator insert(iterator pos, T obj) void insert(iterator pos, size_t n, const T obj) wstawia element obj przed wskazywaną przez iterator pos pozycją i zwraca iterator do dostawionego elementu (powolna funkcja) wstawia n kopii argumentu obj przed pozycją wskazywaną przez iterator pos void insert(iterator pos, iterator poczatek, iterator koniec) wstawia przed pozycją wskazywaną przez iterator pos elementy między iteratorami początek i koniec (włącznie) iterator erase(iterator pos) iterator erase(iterator poczatek, iterator koniec) T& front() T& back() iterator begin() iterator end() iterator rbegin() iterator rend() usuwa element wskazywany przez pos i zwraca iterator do następnego elementu usuwa elementy z przedziału <poczatek;koniec> i zwraca iterator do elementu za nimi zwraca referencję do pierwszego elementu wektora zwraca referencję do ostatniego elementu wektora zwraca iterator do pierwszego elementu wektora (często mylone z front()) zwraca iterator ustawiony za ostatnim elementem wektora zwraca odwrócony iterator do pierwszego elementu zwraca odwrócony iterator do ostatniego elementu