Szablon klasy std::vector

Podobne dokumenty
Szablon klasy std::list

Referencje do zmiennych i obiektów

Wprowadzenie do szablonów szablony funkcji

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

Wprowadzenie do szablonów szablony funkcji

Pola i metody statyczne

Wartości domyślne, przeciażenia funkcji

Wartości domyślne, przeciażenia funkcji

Wyliczanie wyrażenia obiekty tymczasowe

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

Lista dwukierunkowa - przykład implementacji destruktorów

Konstruktor kopiujacy

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

Rzutowanie i konwersje

Przesłanianie nazw, przestrzenie nazw

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

Programowanie i struktury danych

Klasa, metody, rozwijanie w linii

Klasa, metody, rozwijanie w linii

STL: Lekcja 1&2. Filozofia STL

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

Szablony funkcji i szablony klas

Obiekty i metody stałe

Paradygmaty programowania

Język C++ wykład VIII

Techniki Programowania wskaźniki

Programowanie - wykład 4

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

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

Wprowadzenie do szablonów klas

Wstęp do Programowania 2

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

Technologie cyfrowe semestr letni 2018/2019

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

Style programowania - krótki przeglad

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.

Wyjątki (exceptions)

Programowanie obiektowe

TEMAT : KLASY POLIMORFIZM

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

Wyjątki. Wyjątki. Bogdan Kreczmer. Katedra Cybernetyki i Robotyki Politechnika Wrocławska

Programowanie w C++ Wykład 6. Katarzyna Grzelak. 1 kwietnia K.Grzelak (Wykład 6) Programowanie w C++ 1 / 43

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

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

JĘZYKI PROGRAMOWANIA Z PROGRAMOWANIEM OBIEKTOWYM. Laboratorium 3. Instrukcje wyboru

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

Programowanie obiektowe i C++ dla matematyków

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

Przestrzenie nazw. Bogdan Kreczmer. Katedra Cybernetyki i Robotyki Politechnika Wrocławska

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

Algorytmy i Struktury Danych.

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

PARADYGMATY PROGRAMOWANIA Wykład 3

Jak Windows zarządza pamięcią?

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

Geneza powstania języka C++

Opis zagadnieo 1-3. Iteracja, rekurencja i ich realizacja

Geneza powstania języka C++

Techniki Programowania wskaźniki 2

C-struktury wykład. Dorota Pylak

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

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

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

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

Technologie cyfrowe semestr letni 2018/2019

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

Programowanie w języku C++

Przykład implementacji przeciażeń operatorów problem kolizji

Style programowania - krótki przeglad

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

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

Qt sygnały i sloty. Bogdan Kreczmer. Katedra Cybernetyki i Robotyki Wydział Elektroniki Politechnika Wrocławska

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

Wstęp do programowania obiektowego, wykład 7

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

Programowanie w języku C++

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

Programowanie obiektowe w C++ Wykład 12

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

Programowanie Obiektowew języku C++ Zadania L4

Zaawansowane programowanie w języku C++ Biblioteka standardowa

Programowanie w C++ Wykład 14. Katarzyna Grzelak. 3 czerwca K.Grzelak (Wykład 14) Programowanie w C++ 1 / 27

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

tablica: dane_liczbowe

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

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

Praca z aplikacją designer

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

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

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 Obiektowew języku C++ Zadania L9

Zaawansowane programowanie w C++ (PCP)

Paradygmaty programowania. Paradygmaty programowania

Szablony klas, zastosowanie szablonów w programach

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

Podstawy algorytmiki i programowania - wykład 5 C-struktury cd.

Podejście obiektowe - podstawowe pojęcia

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

Kurs programowania. Wykład 3. Wojciech Macyna. 22 marca 2019

Transkrypt:

Szablon klasy std::vector 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 obiektowego. Jest on udostępniony pod warunkiem wykorzystania wyłacznie do własnych prywatnych potrzeb i może on być kopiowany wyłacznie w całości, razem z niniejsza strona tytułowa.

Szablon klasy standardowej vector int main( ) { std::vector<float> W1; W1[0] = 0; W1.at(0) = 0; // To jest bład. W1 jest pusty // Tu wygenerowany zostanie wyjatek. W1.push back(0); W1[0] = 5; W1.at(0) = 6; // Teraz jest już dobrze. // Tu również jest dobrze. std::vector<float> W2(3); // Deklaracja wektora o rozmiarze 3. W1[0] = 0; W1.at(0) = 0; // Tu jest dobrze, gdyż pierwszy element istnieje. // To także jest poprawne. std::vector<float> const W3(4); // Deklaracja wektora o rozmiarze 4. float zm = W3[0]; // Podwójne przeciażenie operatora indeksujacego // pozwala na stosowanie go do obiektów stałych W3[0] = W3.at(0) = zm; // Bład gdyż jest to stały obiekt. } Szablon klasy std::vector 1

Szablon klasy standardowej vector vec.front( ) zwraca pierwszy element, vec.back( ) zwraca ostatni element, vec[ i ] zwraca i-ty element (zakres nie jest sprawdzany), vec.at( i ) zwraca i-ty element (zakres jest sprawdzany, w przypadku błędu zgłaszany jest wyjatek out of range), vec.push back(e) dodaje na koniec kopie elementu e (może powodować realokację pamięci), vec.pop back( ) usuwa ostatni element i nie zwraca go (może powodować realokację pamięci), vec.size( ) zwraca aktualna liczbę elementów, vec.max size( ) zwraca największa możliwa ilość elementów jaka można zaalokować, vec.capacity( ) zwraca największa możliwa ilość elementów bez realokacji, vec.reserve( ) zwiększa pojemność jeśli nie jest wystarczajaca. Szablon klasy std::vector 2

Szablon klasy standardowej vector vec.begin( ) zwraca iterator wskazujacy na pierwszy element, vec.end( ) zwraca iterator wskazujacy na pozycję za ostatnim elementem, vec.rbegin( ) zwraca iterator dla iteracji odwrotnej wskazujacy na ostatni element, vec.rend( ) zwraca iterator dla iteracji odwrotnej wskazujacy na pozycję przed pierwszym elementem, std::vector<float> V1(6); float zm; for (int i=0; i < V1.size(); i++) V1[i] = 13; for (std::vector<float>::iterator iter = V1.begin(); iter!= V1.end(); ++iter) iter = 13; Szablon klasy std::vector 3

Przykład wykorzystania wzorca std::vector class Wektor f3: public std::vector<float> { float & x, & y, & z; public: float x() const { return x; } float &x() { return x; }... float operator () (int i) const { return std::vector<float>::at(i); } float &operator () (int i) { return this ->std::vector<float>::at(i); } float operator [ ] (int i) const { return std::vector<float>::operator[ ](i); } float &operator [ ] (int i) { return this ->std::vector<float>::operator[ ](i); }... Wektor f3(): std::vector<float>(3), x(this ->std::vector<float>::operator[ ](0)), y(this ->std::vector<float>::operator[ ](1)), z(this ->std::vector<float>::operator[ ](2)) { } }; // Inicjalizacja dla std::vector // Inicjalizacja kolejnych referencji Szablon klasy std::vector 4

Wektor jako tablica #include <iostream> #include <vector> using namespace std; int main() { vector<double> Tab1(20), Tab2(Tab1.size()), Tab3(Tab1.size()); for (int i = 0; i < Tab1.size(); ++i) Tab1[i] = Tab2[i] = Tab3[i] = 4; Tab3.front() = Tab3.back() = 5; Tab3.at(4) = 5; // Podstawienie do pierwszego i ostatniego elementu. // Dostęp z kontrola zasięgu. if (Tab1 == Tab2) { cout << "Te tablice sa równe." << endl; } if (Tab2 < Tab3) { cout << "Ta nierówność jest spełniona." << endl;} return 0; } Szablon std::vector dostarcza udogodnienia, które moga być bardzo użyteczne w przypadku jego stosowania jako tablicy (dostęp z kontrola zakresu, pamiętanie rozmiaru, przeciażone operatory: ==, <, > itp). Szablon klasy std::vector 5

Pytania i ćwiczenia 1. Dany jest fragment kodu: vector<double> Tab(5); double &Zm = Tab[1]; Tab.push back(10); Zm = Tab[5]; (a) Czy prawda jest, że Zm == 10? (b) Czy działanie tego fragmentu kodu może spowodować bład w programie? Uzasadnij odpowiedź. 2. Dany jest fragment kodu: vector<double> Tab1(5), Tab2(7); for (int i=0; i < Tab1.size(); ++i) Tab1[i] = 0; for (int i=0; i < Tab2.size(); ++i) Tab1[i] = 0; (a) Jaki będzie wynik operacji Tab1 == Tab2? (b) Czy zależy on od wartości elementów tych tablic? Szablon klasy std::vector 6