Einführung in die STL

Ähnliche Dokumente
Einführung in die STL

Polymorphismus 44. Function.hpp. #include <string>

Objektorientierte Programmierung mit C++ SS 2007

Die C++ Standard Template Library Andreas Obrist

Mapra: C++ Teil 4. Felix Gruber. 6. Mai IGPM, RWTH Aachen. Felix Gruber (IGPM, RWTH Aachen) Mapra: C++ Teil 4 6.

Polymorphismus 179. Function.h. #include <string>

C++ Teil 6. Sven Groß. 27. Mai Sven Groß (IGPM, RWTH Aachen) C++ Teil Mai / 14

Programmierkurs C++ Templates & STL (1/2)

Konstruktor/Destruktor

C++ Teil 8. Sven Groß. 5. Dez IGPM, RWTH Aachen. Sven Groß (IGPM, RWTH Aachen) C++ Teil 8 5. Dez / 16

C++ Teil 5. Sven Groß. 13. Mai Sven Groß (IGPM, RWTH Aachen) C++ Teil Mai / 18

Einführung in C ++ und die Objektorientierte Programierung

Hier wird die Verwendung der Standard Template Library (kurz STL) kurz beschrieben. Inhalt 1.Verwendung der STL Grundlagen...

Vererbung. Florian Adamsky, B. Sc. (PhD cand.) Softwareentwicklung im WS 2014/15.

C++ Teil 7. Sven Groß. 30. Nov Sven Groß (IGPM, RWTH Aachen) C++ Teil Nov / 13

C++ Teil 7. Sven Groß. 3. Juni Sven Groß (IGPM, RWTH Aachen) C++ Teil 7 3. Juni / 16

Computergrundkenntnisse und Programmieren, WS 07/08, Übung 11: Klassen der Standardbibliothek 2

Einführung in die STL anhand eines ausgewählten Beispiels

Programmier-Befehle - Woche 09

Wo und wie lange leben Objekte? globale Objekte lokale Objekte dynamische Objekte

Objektorientierte Anwendungsentwicklung

Vererbung und Polymorphie

C++ - Einführung in die Programmiersprache Standard Templates. Leibniz Universität IT Services Anja Aue

Mapra: C++ Teil 4. Felix Gruber, Michael Rom. 24. Mai 2016 IGPM. Felix Gruber, Michael Rom (IGPM) Mapra: C++ Teil 4 24.

Ziel, Inhalt. Programmieren in C++ Wir lernen wie man Funktionen oder Klassen einmal schreibt, so dass sie für verschiedene Datentypen verwendbar sind

Programmieren in C++ Überblick

5. Behälter und Iteratoren. Programmieren in C++ Überblick. 5.1 Einleitung. Programmieren in C++ Überblick: 5. Behälter und Iteratoren

Programmieren 2 C++ Überblick

Algorithmen und Datenstrukturen

Mapra: C++ Teil 2. Felix Gruber, Sven Groß. 2. Mai 2017 IGPM. Felix Gruber, Sven Groß (IGPM) Mapra: C++ Teil 2 2. Mai / 11

Sortierte Assoziative Container der STL

Informatik - Übungsstunde

Ein kleiner Blick auf die generische Programmierung

C++ Kurs Teil 3. Standard Template Library (STL) Kommunikation mit der shell Hyper Text Markup Language (HTML)

Standard Template Library

Objektorientierte Programmierung II

C-Arrays vs. C++-Container

C++ Notnagel. Ziel, Inhalt. Programmieren in C++

Probeklausur. Musterlösung

Programmierkurs Java

Nachklausur: Grundlagen der Informatik I, am 02. April 2008 Dirk Seeber, h_da, Fb Informatik

Programmierkurs. Steffen Müthing. November 16, Interdisciplinary Center for Scientific Computing, Heidelberg University

Inoffizielle Lösung zur Informatik I Prüfung Frühlingssemester 2010 Freitag, 13. August May 23, 2011

Angewandte Mathematik in OOP WS 2011/12. Abschluss-Test

JAVA KURS COLLECTION

Klausur: Programmieren II

Standardbibliotheken. Datentyp bool. Eingaben 2/2. Eingaben 1/2. In C gibt es keinen logischen Datentyp

Algorithmen und Datenstrukturen (für ET/IT) Wiederholung: Ziele der Vorlesung. Wintersemester 2012/13. Dr. Tobias Lasser

Repetitorium Programmieren I + II

Algorithmen und Datenstrukturen (für ET/IT)

9. Vektoren. (auch Felder/array)

Übung HP Angabe: #include <iostream> #include <vector> #include <locale>

Nachklausur: Grundlagen der Informatik I, am 02. April 2008 Dirk Seeber, h_da, Fb Informatik. Nachname: Vorname: Matr.-Nr.

Nachklausur: Grundlagen der Informatik I, am 02. April 2008 Dirk Seeber, h_da, Fb Informatik. Nachname: Vorname: Matr.-Nr.

1 Einleitung Generizität Syntax... 2

Java Einführung Collections

Programmieren in C/C++ und MATLAB

Generative Programmierung

Assoziative Container in C++ Christian Poulter

Kapitel 13. Definition von Klassen. OOP Thomas Klinker 1

Einführung in die Programmierung Wintersemester 2018/19

C++ Teil 5. Sven Groß. 12. Nov IGPM, RWTH Aachen. Sven Groß (IGPM, RWTH Aachen) C++ Teil Nov / 16

Einführung in die Programmiersprache C

Programmier-Befehle - Woche 9

Informatik für Mathematiker und Physiker Woche 7. David Sommer

C++ Teil 4. Sven Groß. 30. Apr IGPM, RWTH Aachen. Sven Groß (IGPM, RWTH Aachen) C++ Teil Apr / 16

C++ vs. Java. Hello world! Java C++ class HelloWorld { static public void main(string args) { System.out.println("Hello World!

ADT: Java Collections und ArrayList

Übungen zur Vorlesung EidP (WS 2015/16) Blatt 6

STL-Container und Laufzeit

Einführung in die Informatik: Programmierung und Software-Entwicklung, WS 11/12 1. Kapitel 11. Listen. Listen

C++ Teil 7. Sven Groß. 26. Nov IGPM, RWTH Aachen. Sven Groß (IGPM, RWTH Aachen) C++ Teil Nov / 18

Generative Programmierung

Klausur: Grundlagen der Informatik I, am 06. Februar 2009 Gruppe: B Dirk Seeber, h_da, Fb Informatik. Nachname: Vorname: Matr.-Nr.

Klausur: Grundlagen der Informatik I, am 06. Februar 2009 Gruppe: A Dirk Seeber, h_da, Fb Informatik. Nachname: Vorname: Matr.-Nr.

Beziehungen zwischen Objekten

C++ Teil 12. Sven Groß. 18. Jan Sven Groß (IGPM, RWTH Aachen) C++ Teil Jan / 11

C-Arrays vs. C++-Container

Programmieren - C++ Templates

Vererbung I. Kfz Eigenschaften und Methoden der Klasse Kfz Lkw. Pkw. Eigenschaften und Methoden der Klasse Kfz

Einführung in die Programmierung mit C++

Einführung in die Informatik: Programmierung und Software-Entwicklung, WS 16/17. Kapitel 13. Listen. Listen 1

Einführung in die Informatik: Programmierung und Software-Entwicklung, WS 15/16. Kapitel 12. Listen. Listen 1

VDK-Informatik

Programmieren II Abstrakte Klassen / Virtuelle Methoden. Programmieren II Abstrakte Klassen / Virtuelle Methoden

C++ - Einführung in die Programmiersprache Header-Dateien und Funktionen. Leibniz Universität IT Services Anja Aue

Klausur: Informatik I am 06. Februar 2009 Gruppe: D Dirk Seeber, h_da, Fb Informatik. Nachname: Vorname: Matr.-Nr.: Punkte:

Übung HP Beispielaufgaben 3

Programmierung und Angewandte Mathematik

C++-Crashkurs. Jan Rosendahl, Jan-Thorsten Peter, Andreas Guta

8. Referenzen und Zeiger

Themen. Formatierte und unformatierte Eingabe Bedingungsoperator Namespaces Kommandozeilenargumente

32 C++ Library Headers und 18 C Library Headers.

4 Generische Programmierung. 4.1 Klassen-Templates (*) 4.2 Funktions-Templates (*) 4.3 Besondere Programmiertechniken (Smart Pointer)

Übungsstunde: Informatik 1 D-MAVT

Entwickeln Sie ein C/C++-Programm für die Verwaltung einer Artikeldatei gemäß folgender Vorgaben!

Erste Java-Programme (Java Wiederholung & Vererbung)

Einleitung Typsystem Typisierung Zusammenfassung Literatur. Typisierung. Effiziente Programmierung. Thomas Schnieders

Thema heute: Vererbung und Klassenhierarchien. Abgeleitete Klassen. Vererbung von Daten und Funktionen. Virtuelle Funktionen

Transkript:

1/29 in die STL Florian Adamsky, B. Sc. (PhD cand.) florian.adamsky@iem.thm.de http://florian.adamsky.it/ cbd Softwareentwicklung im WS 2014/15

2/29 Outline 1

3/29 Inhaltsverzeichnis 1

4/29 Typisierung Definition (Typsystem) schränkt den Wertebereich und die Operation von Variablen ein. Arten schwach Datentyp wird nicht gespeichert dadurch schnell stark Datentyp wird gespeichert statisch Compiler kann zur Compilezeit den Datentyp prüfen dynamisch Interpreter kann zur Laufzeit den Datentyp prüfen

5/29 Beispiel Typsystem Example (Dynamisch Javascript) var number = 13; var string = "thirteen"; var komma = 3.14; Example (Statisch C ++ ) int number = 13; string str = "thirteen"; double komma = 3.14;

6/29 Typisierung von Programmiersprachen schwach und statisch C, C ++ Objective C schwach und dynamisch gibt es nicht stark und statisch Java stark und dynamisch Python Perl JavaScript Ruby

7/29 Was ist generische Programmierung? Definition (Generische Programmierung) Generisch bedeutet allgemeingültig oder nicht spezifisch. GP verbessert die Wiederverwendbarkeit von Code. Es befreit einen Algorithmus von festen Datentypen. stark und dynamisch typisierte Sprachen haben automatisch GP in C ++ wird die GP mit Templates umgesetzt

8/29 Problem Example (Klasse Util) class Util { public: void swap(int& a, int& b) { int temp = a; a = b; b = temp; ;

8/29 Problem Example (Klasse Util) Example (Main) class Util { public: void swap(int& a, int& b) { int temp = a; a = b; b = temp; ; int main(void) { Util utils; int a = 10; int b = 23; cout << a << " - " << b << endl; utils.swap(a, b); cout << a << " - " << b << endl;

8/29 Problem Example (Klasse Util) Example (Main) class Util { public: Problem void swap(int& a, int& b) { int temp = a; a = b; b = temp; ; int main(void) { Util utils; Die Methode tauschevariablen() funktioniert nur mit int&. Alle anderen Datenty- int a = 10; int b = 23; pen oder Klassen müssen erneut implementiert werden. cout << a << " - " << b << endl; utils.swap(a, b); cout << a << " - " << b << endl;

Händische und umständliche Lösung Example (Klasse Util) class Util { public: void swap(int& a, int& b) { int temp = a; a = b; b = temp; void swap(double& a, double& b) { double temp = a; a = b; b = temp; 9/29 ; //

Händische und umständliche Lösung Example (Klasse Util) class Util { public: void swap(int& a, int& b) { int temp = a; a = b; b = temp; Algorithmus ist gleich, nur die Datentypen sind unterschiedlich void swap(double& a, double& b) { double temp = a; a = b; b = temp; 9/29 ; //

10/29 Templates Templates erlaubt es Methoden zu schreiben für mehrere Datentypen Compiler erkennt mit welchen Datentypen die Methode aufgerufen wurde und generiert automatisch den entsprechenden Code Methodendefinition: template <class identifier> method_declaration;

Beispiel einer Template-Methode Example (Klasse Util) class Util { public: template <class TYPE> void swap(type& a, TYPE& b) { TYPE temp = a; a = b; b = temp; ;

Beispiel einer Template-Methode Example (Klasse Util) class Util { public: template <class TYPE> void swap(type& a, TYPE& b) { TYPE temp = a; a = b; b = temp; ; Example (Main) int main(void) { Util utils; int a = 10; int b = 23; utils.swap(a, b);

Beispiel einer Template-Methode Example (Klasse Util) class Util { public: template <class TYPE> void swap(type& a, TYPE& b) { TYPE temp = a; a = b; b = temp; ; Example (Main) int main(void) { Util utils; int a = 10; int b = 23; utils.swap(a, b); double c = 10.0; double d = 23.0; utils.swap(c, d);

11/29 Beispiel einer Template-Methode Example (Klasse Util) class Util { public: template <class TYPE> void swap(type& a, TYPE& b) { TYPE temp = a; a = b; b = temp; ; Example (Main) int main(void) { Util utils; int a = 10; int b = 23; utils.swap(a, b); double c = 10.0; double d = 23.0; utils.swap(c, d); Util obj1; Util obj2; utils.swap(obj1, obj2);

12/29 Unterschiede der Bibliotheken STL (S)tandard (T)emplate (L)ibrary programmiert von Alexander Stepanov bevor es einen C ++ Standard gab

12/29 Unterschiede der Bibliotheken STL (S)tandard (T)emplate (L)ibrary programmiert von Alexander Stepanov bevor es einen C ++ Standard gab Stdlib C ++ (St)an(d)ard (Lib)rary C ++ Kommitee orientierte sich stark an die STL bei der Standardisierung der Stdlib

12/29 Unterschiede der Bibliotheken STL (S)tandard (T)emplate (L)ibrary programmiert von Alexander Stepanov bevor es einen C ++ Standard gab Stdlib C ++ (St)an(d)ard (Lib)rary C ++ Kommitee orientierte sich stark an die STL bei der Standardisierung der Stdlib Boost Menge von freien und qualitativen Bibliotheken

13/29 Umfang der STL random vector input Iteratoren STL Container map forward bitset Algorithmen counting sorting searching

14/29 Container random vector input Iteratoren STL Container map forward bitset Algorithmen counting sorting searching

15/29 Vector Definition (Vector) ein dynamisches Array, dass während der Laufzeit neue Elemente aufnehmen kann. #include <vector>

16/29 Vector Beispiel Example (Code) #include <iostream> #include <vector> using namespace std; int main() { vector<int> vector; for (int i = 0; i < 100; ++i) { vector.push_back(i); cout << vector[i] << endl;

16/29 Vector Beispiel Example (Code) #include <iostream> #include <vector> Einbindung der vector Bibliothek using namespace std; int main() { vector<int> vector; for (int i = 0; i < 100; ++i) { vector.push_back(i); cout << vector[i] << endl;

16/29 Vector Beispiel Example (Code) #include <iostream> #include <vector> using namespace std; int main() { vector<int> vector; Definition eines Vectors der int-werte speichert for (int i = 0; i < 100; ++i) { vector.push_back(i); cout << vector[i] << endl;

16/29 Vector Beispiel Example (Code) #include <iostream> #include <vector> using namespace std; int main() { vector<int> vector; for (int i = 0; i < 100; ++i) { vector.push_back(i); cout << vector[i] << endl; Methode push_back() fügt neue Element ans Ende hinzu

16/29 Vector Beispiel Example (Code) #include <iostream> #include <vector> using namespace std; int main() { vector<int> vector; for (int i = 0; i < 100; ++i) { vector.push_back(i); cout << vector[i] << endl; Zugriff auf einzelne Element wie bei einem normalen Array

17/29 Vector Methoden Example (Ausgangslage) vector<int> vec; Methode vec.at(n) vec.size() vec.push_back(val) vec.pop_back() vec.clear() Beschreibung Liefert das n-te Element zurück Liefert die Anzahl der Elemente zurück Fügt val am Ende hinzu Entfernt das letzte Element Entfernt alle Element aus vec

18/29 Weitere Container sequenzielle Container vector list assoziative Arrays map set andere Container bitmap

19/29 Algorithm random vector input Iteratoren STL Container map forward bitset Algorithmen counting sorting searching

20/29 algorithm Definition (Algorithmus) methodisches, schrittweises Verfahren das garantiert zu einer Lösung führt. Die STL-Bibliothek ist eine Ansammlung an Algorithmen aus den folgenden Problembereichen: Sortierung, Zählen, Suchen,... #include <algorithm>

21/29 Suchen Example (Suchen in einem Array) #include <iostream> #include <algorithm> using namespace std; int main(void) { int array[] = { 10, 23, 30, 42 ; int* ptr = find(begin(array), end(array), 23); if (ptr!= end(array)) cout << "Gesuchte Element: " << *ptr << endl;

22/29 Sortieren Example (Array sortieren) #include <iostream> #include <algorithm> using namespace std; bool sortierkriterium (int a, int b) { return (a < b); int main(void) { int array[] = { 32, 10, 23, 42, 100, 72, 14 ; sort(begin(array), end(array), sortierkriterium); for (int i = 0; i < 7; i++) cout << array[i] << endl;

23/29 Zählen Example (Elemente zählen in einem Array) #include <iostream> #include <algorithm> using namespace std; int main(void) { int array[] = { 32, 10, 23, 10, 100, 10, 14 ; int anzahl = count(begin(array), end(array), 10); cout << anzahl << endl; // 3

24/29 Weitere Algorithmen Funktion for_each() transform() replace() remove() unique() shuffle() Beschreibung Für jedes Element soll eine Funktion aufgerufen werden Trasformiere Array mit einer Funktion Ersetze den Wert x durch y Entferne den Wert x Entferne alle doppelten Einträge Mische Werte in einem Array

25/29 Iteratoren random vector input Iteratoren STL Container map forward bitset Algorithmen counting sorting searching

26/29 Iteratoren Definition (Iterator) ist ein Objekt das über einen Container iteriert. Auflistung Iterator ist einem Pointer sehr ähnlich Iteratoren trennen wiederum den Algorithmus von dem Datentyp verbindet die Container der STL mit den Algorithmen der STL

27/29 Unterschied Index und Iterator Example (Index) vector<int> vec; // for (int i = 0; i < vec.size(); i++) { cout << vec[i] << endl;

27/29 Unterschied Index und Iterator Example (Index) Example (Iterator) vector<int> vec; // for (int i = 0; i < vec.size(); i++) { cout << vec[i] << endl; vector<int> vec; // vector<int>::iterator it; for (it = vec.begin(); it!= vec.end(); ++it) { cout << *it << endl;

28/29 Whyyyy? Index Iteration ist nicht überall möglich (z.b. list oder map) Flexible, da der Container einfach geändert werden kann die Funktionen in <algorithm> verlangen alle einen Iterator

29/29 Zusammenfassung Programmiersprachen haben unterschiedliche Typsysteme (Typisierung) Generische Programmierung trennt den Algorithmus von festen Datentypen C ++ verwendet templates um Generische Programmierung umzusetzen Unterschied zwischen STL, Stdlib und Boost STL Container vector STL Algorithmen Sortierung, Zählen und Suchen Iterator verbindet die Container mit den Algorithmen