Einführung in die Programmierung mit C++

Ähnliche Dokumente
Assoziative Container in C++ Christian Poulter

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

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

Einführung in die STL

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

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

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

Wintersemester Maschinenbau und Kunststofftechnik. Informatik. Tobias Wolf Seite 1 von 23

Objektorientierte Programmierung mit C++ SS 2007

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

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

Grundlagen C und C++ Einheit 04: Weitere Grundlagen in C++ Lorenz Schauer Lehrstuhl für Mobile und Verteilte Systeme

Einführung in die STL 226

Implementation VL3 Gruppe A

Programmieren in C/C++ und MATLAB

4 Schleifen und Dateien

Die C++ Standard Template Library Andreas Obrist

Einführung in die STL

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

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

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

Programmieren in C++ Überblick

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

15. Die Klasse string

Kapitel 8: Abstrakte Datentypen. Inhalt. Definition ADT Keller ADT Schlange

Einführung in die Informatik für Naturwissenschaftler und Ingenieure (alias Einführung in die Programmierung)

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

Programmieren 2 C++ Überblick

4 ZEICHEN UND ZEICHENKETTEN

C++ Kurs Teil 3. Standard Template Library (STL) Exceptions Kommunikation mit der shell. Übersicht vector<> algorithm: sort, for_each map<>

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

Von C zu C++ Karl Gmeiner

Algorithmen und Datenstrukturen (für ET/IT)

Objektorientierte Programmierung mit C++ Vector und List

Algorithmen und Datenstrukturen

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

Quiz und Übungen. C++ Übung am 19. Mai 2016

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

Einführung in I/O und File-Handling in C ++

virtual Wertpapier& operator=(const Wertpapier&); // VIRTUELLE ZUWEISUNG protected: static enum {wortfeldlaenge = 20}; char* name_z; double kurs; };

Software Praktikum: C++ und LEDA / STL Sommersemester 2003

ios fstream ifstream

Schriftlicher Test (120 Minuten) VU Einführung ins Programmieren für TM. 25. Jänner 2016

For matierte Ein-/Ausgabe iostream: multiple inheritance von istream und ostream Weitere abgeleitete Klassen (z. B. Ausgabe nach Strings)

C++ Standardbibliothek

5. Strukturen und Algorithmen

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

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

Mapra: C++ Teil 7. Felix Gruber, Michael Rom. 14. Juni 2016 IGPM. Felix Gruber, Michael Rom (IGPM) Mapra: C++ Teil 7 14.

Programmierkurs Kapitel 4: Dateien Seite 1. Verwaltungfeld im Speicher. 4.1 Alternativen zur Programmierung der Eingabe und der Ausgabe

Objektorientierte Programmierung

Informationsverarbeitung

Problem: Was ist, wenn der Stapel voll ist? Idee: Erzeuge dynamisch ein grösseres Array und kopiere um. Dynamische Anpassung der Größe

Themen. Formatierte und unformatierte Eingabe Bedingungsoperator Namespaces Kommandozeilenargumente

13 Reguläre Ausdrücke

Einführung in die Programmierung mit C++

Dateien mit wahlfreiem Zugriff (Random Access Files)

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

Inhalt Streams Eingabe / Ausgbe in C Dateizugriff in C Eingabe / Ausgabe in C++ Dateizugriff in C++ Error Handling

Programmierkurs Java

... Vorwort Einstieg in die Programmierung Ablaufsteuerung... 71

C++ - Einführung in die Programmiersprache Ein- und Ausgabe in die Konsole. Leibniz Universität IT Services Anja Aue

3D Programmierpraktikum: Einführung in C++ - Teil 1

Sortierte Assoziative Container der STL

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

Programmieren in C/C++ und MATLAB

back() 341, 342 begin() 317, 337 binary_search() 326 bool 49 boolalpha 312 case 73 cerr 80 char 39

Ein- und Ausgabe mit Dateien

Organisatorisches. Algorithmen und Datenstrukturen (für ET/IT) Programm heute. Definition Datenstruktur. Nächste Woche keine Vorlesung!

Einführung in die C++ Programmierung für Ingenieure

Objektorientierte Programmierung

Grundlagen der Informatik 6. Arrays I

Einführung in die Programmierung Wintersemester 2016/17

Variablen in C++ Einfache Variablen Strukturen Arrays und Zeichenketten Zeiger und Referenzen Parameter Dynamische Speicherverwaltung

Hochschule Darmstadt Informatik-Praktikum (INF 1) WS 2014/2015 Wirtschaftsingenieur Bachelor 4. Aufgabe Datenstruktur, Dateieingabe und -ausgabe

Hydroinformatik I: IO - Files

Mapra: C++ Teil 3. Felix Gruber. 29. April IGPM, RWTH Aachen. Felix Gruber (IGPM, RWTH Aachen) Mapra: C++ Teil 3 29.

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

Klausur C++ #1 Jahr: 2001; Dozent: Dipl.Ing. Sorber

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

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

Grundlagen der Informatik 12. Strukturen

Peter Prinz Ulla Kirch-Prinz C+ + Lernen und professionell anwenden. ffl mitp

Einführung in die Programmierung mit C++

Arnold Willemer. Einstieg in C++ Galileo Press

Übung 13: Priority Queues (Vorrangwarteschlangen 1 )

7. Übung Informatik II - Objektorientierte Programmierung

Kurze Einführung in die Programmiersprache C++ und in Root

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

C++ Prof. Peter Sommerlad Fredy Ulmer

C++-Zusammenfassung. H. Schaudt. August 18, 2005

Funktionales C++ zum Ersten

Arnold Willemer C++ Der Einstieg. WlLEY

Einführung in die Informatik für Naturwissenschaftler und Ingenieure (alias Einführung in die Programmierung)

Programmier-Befehle - Woche 10

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

Die elementare Ausgabe von Daten auf externe Medien, wie Dateien und das Einlesen davon wird demonstriert.

Ein- und Ausgabe in Dateien (File I/O)

Programmier-Befehle - Woche 8

Programmierkurs. SoSe Markus Geveler Inst. f. Applied Mathematics, TU Dortmund.

Transkript:

1 Seite 1 Einführung in die Programmierung mit C++ Teil IV - Weiterführende Themen 13. Klassenbibliotheken Klassenbibliotheken Seite 2 Sammlung von Algorithmen und Klassen in Klassenbibliotheken: Konzept: Wiederverwendbarkeit von Code Voraussetzung Schnittstellen sind allgemein gehalten Informationsschutzprinzip wurde angewandt Schnittstellen sind gut dokumentiert Beispiel: C++ Standard Klassenbibliothek

2 C++ Standard Klassenbibliothek Seite 3 Zeichenketten (Strings) Ein- und Ausgabe (Streams) generische Container-Klassen einschliesslich Iteratoren und Algorithmen Alle Klassen und Namen im Namensraum std entweder am Anfang using namespace std; oder allen Klassen und Namen std:: voranstellen String Klasse I Seite 4 Header #include <string> Konstruktoren std::string( const char * ) std::string( std::string ) Kopie von normalem C String Kopierkonstruktor Operatoren =, +, += Kopieren, Zusammenführen und Anhängen [..] Zugriff auf einzelne Zeichen Methoden find(), rfind(), substr() insert(), erase(), replace() length(), size() c_str() Suchen und extrahieren von Substrings Operationen auf Substrings Länge bzw. Größe abfragen zu C String umwandeln

3 String Klasse II Seite 5 Beispiel (benötigt iostream und string Header) std::string a( "Hallo" ); std::tring b( a ); // (eigenständige) Kopie von a std::string c; // zunächst leer c = a + b; cout << c << endl; a += ", Welt"; cout << a << endl; cout << b << endl; c.erase( 5, 5 ); c.insert( 4, "ihall" ); cout << c << endl; // "HalloHallo" // "Hallo, Welt" // "Hallo" // "Hallihallo" string::size_type pos = c.find( "hallo", 0 ); cout << pos << endl; // 5 Ein- und Ausgabe I Seite 6 Header #include <iostream> allgemein Ein-/Ausgabe Objekte cin, cout, cerr, clog endl Standardeingabe, -ausgabe, -fehlerausgaben New Line Operatoren <<, >> Ausgabe an bzw. Eingabe von Stream

4 Ein- und Ausgabe II Seite 7 Header #include <fstream> Ein-/Ausgabe in Dateien Klassen ifstream, ofstream fstream Dateiabstraktion für Lese- bzw. Schreibzugriff Dateiabstraktion für wahlfreien Zugriff Methoden open(), close() read(), write() tellg(), seekg(), tellp(), seekp() öffnen und schließen Zugriff auf Binärdateien Abfragen/Setzen des Lese-/Schreibzeigers Ein- und Ausgabe III Seite 8 Beispiel (benötigt iostream, fstream und string Header) std::string name; std::cin >> name; std::cout << "Hallo, " << name << std::endl; std::ofstream( "name.dat" ) ofile; ofile << name; std::ifstream( "name.dat" ) ifile; ifile >> name; std::cout << "Hallo, " << name << std::end; char buffer[100]; std::fstream file1( "file.dat", std::ios::in ); std::fstream file2( "file.dat", std::ios::out ); file1.read( buffer, 100 ); for ( int i = 0; i < 50; ++i ) { char temp = buffer[i]; buffer[i] = buffer[99-i]; buffer[99-i] = temp; file2.write( buffer, 100 ); file1.close(); file2.close();

5 Container Klassen I Seite 9 Container-Objekte enthalten andere Objekte sehr oft gebraucht, mit verschiedenen Inhaltstypen daher als Klassenschablonen implementiert Klassen für verschiedene Zugriffsmuster vector wahlfreier Zugriff, schnelles Anfügen am Ende, langsames Einfügen am Anfang, Integer als Indizes list schnelles Einfügen überall, nur serieller Zugriff deque (double-ended queue) wahlfreier Zugriff, schnelles Einfügen am Anfang und Ende, Integer als Indizes stack einfügen/entnehmen nur am Ende map wahlfreier Zugriff, beliebige Typen als Indizes (Schlüssel) oft auch Dictionary genannt Container Klassen II Seite 10 Methoden insert() erase() clear() size() capacity() empty() push_back() pop_back() push_front() pop_front() Einfügen eines Elements Löschen eines Elements Löschen aller Elemente Anzahl der gespeicherten Elemente abfragen Anzahl der Elemente, die gespeichert werden können bevor neuer Speicher allokiert werden muss Prüft ob Container leer ist Anhängen ans Ende Entfernen vom Ende Einfügen am Anfang (außer vector) Entfernen vom Anfang (außer vector) Operatoren [..] wahlfreier Zugriff (vector, deque)

6 Iteratoren I Seite 11 Iteratoren zeigen auf Elemente innerhalb eines Containers jeder Container hat eigene Iteratortypen mit spezifischen Eigenschaften Vorwärts- und Rückwärtsiteratoren alle Iteratoren können zum nächsten (Vorwärtsiterator) bzw. vorherigen (Rückwärtsiterator) Element springen Inkrement Operator ++ sowohl bei Vorwärts- als auch bei Rückwärtsiteratoren Iteratoren von wahlfreien Containern (vector, deque) erlauben auch Sprünge um beliebig viele Elemente Sprünge entgegen der eigentlichen Richtung Dekrement Operator -- Iteratoren II Seite 12 Container Methoden zum Erzeugen eines Iterators begin(), rbegin() Vor-/Rückwärts-Iterator auf erstes/letztes Element end(), redn() Vor-/Rückwärts-Iterator hinter letztes/vor erstes Element wenn begin() und end() identisch dann Container leer Iterator Operatoren ++ nächstes Element *, -> Elementzugriff == Vergleich (wahr wenn zwei Iteratoren auf selbes Element verweisen) Iterator operatoren für wahlfreie Container -- vorheriges Element +, -, mathematische Operationen auf Zugriffsindex +=, -=

7 Container Klassen und Iteratoren I Seite 13 Beispiel zu vector (benötigt iostream und vector Header) std::vector<int> container; container.push_back( 4 ); container.insert( container.begin(), 3 ); container.insert( container.begin(), 1 ); container.insert( container.begin(), 0 ); std::vector<int>::iterator while ( iter!= container.end() ) std::cout << * iter++ << std::endl; if ( * iter == 3 ) break; container.insert( iter, 2 ); Container Klassen und Iteratoren II Seite 14 Fortsetzung if ( * iter == 2 ) break; container.erase( iter ); container[2] = 2; container[3] = 3; iter = container.begin() + 2; std::cout << * iter << std::endl; std::vector<int>::reverse_iterator riter = container.rbegin(); while ( riter!= container.rend() ) std::cout << * riter++ << std::endl; std::cout << container.size() << std::endl;

8 Container Klassen und Iteratoren III Seite 15 Beispiel zu list (benötigt iostream und list Header) std::list<int> container; container.push_back( 4 ); container.insert( container.begin(), 3 ); container.insert( container.begin(), 1 ); container.insert( container.begin(), 0 ); std::list<int>::iterator while ( iter!= container.end() ) std::cout << * iter++ << std::endl; if ( * iter == 3 ) break; container.insert( iter, 2 ); Container Klassen und Iteratoren IV Seite 16 Fortsetzung if ( * iter == 2 ) break; container.erase( iter ); if ( * iter == 3 ) * iter = 2; if ( *iter == 4 ) * iter = 3; std::list<int>::reverse_iterator riter = container.rbegin(); while ( riter!= container.rend() ) std::cout << * riter++ << std::endl; std::cout << container.size() << std::endl;

9 Container Klassen und Iteratoren V Seite 17 Beispiel zu vector (benötigt iostream und vector Header) class test { public: void print() { std::cout << "Buh!" << std::endl ; ; vector<test> container; test t; container.push_back( t ); container.begin()->print(); container[0].print(); Eigene Datentypen in Container Klassen Seite 18 Container Klassen verwenden Kopier-Konstruktoren und Zuweisungs-Operatoren der enthaltenen Datentypen Diese müssen daher bei Verwendung von nicht-eingebauten Datentypen sinnvoll definiert sein Wichtig insbes. bei interner Allokierung von Speicher in Objekten Kopier-Konstruktor/Zuweisungs-Operator müssen in kopiertem Objekt neuen Speicher allokieren und den Inhalt des allokierten Speichers im ursprünglichen Objekt kopieren Nicht lediglich Zeiger auf allokierten Speicher kopieren Speicher kann doppelt freigegeben werden