Repetitorium PG1 05.09. - 09.09.2005 4: Standard Template Library FH-Darmstadt, FB Informatik.

Slides:



Advertisements
Ähnliche Präsentationen
Einführung in die Programmiersprache C/C++
Advertisements

Programme in C++.
Programmieren 1 – Kontrollstrukturen Teil 2
Ein- und Ausgabe von Dateien
Programmierkurs C/C++
Seminar: "Einführung in C/C++" Einführung in die Programmiersprache C/C++ Donnerstag Andreas Döring SS 2004.
Gliederung des Inhalts
Klassenvariable (auch Klassendaten bzw. statische Attribute genannt) und statische Methoden.
Dateien. Eine Datei wird in C++ als ein Stream, also als ein Objekt einer bestimmten Klasse dargestellt.
EINI-I Einführung in die Informatik für Naturwissenschaftler und Ingenieure I Kapitel 9 Claudio Moraga; Gisbert Dittrich FBI Unido
EINI-I Einführung in die Informatik für Naturwissenschaftler und Ingenieure I Vorlesung 2 SWS WS 99/00 Gisbert Dittrich FBI Unido
EINI-I Einführung in die Informatik für Naturwissenschaftler und Ingenieure I Kapitel 5 Claudio Moraga; Gisbert Dittrich FBI Unido
EINI-I Einführung in die Informatik für Naturwissenschaftler und Ingenieure I Kapitel 4 Claudio Moraga; Gisbert Dittrich FBI Unido
EINI-I Einführung in die Informatik für Naturwissenschaftler und Ingenieure I Kapitel 2 Gisbert Dittrich; Claudio Moraga FBI Unido
Abstrakter Datentyp in C++ I - Klasse -
C++ Standardbibliothek
Objektorientierte Programmierung
Einführung in die Programmierung
Informatik 1 Übung 8. NACHBESPRECHUNG Übung 8 Rekursion Existiert Weg von A nach B?
Einführung in die Programmierung Wintersemester 2012/13 Prof. Dr. Günter Rudolph Lehrstuhl für Algorithm Engineering Fakultät für Informatik TU Dortmund.
Repetitorium PG : Gültigkeit, Sichtbarkeit & Operatorüberladung FH-Darmstadt, FB Informatik.
Repetitorium PG : Pointer FH-Darmstadt, FB Informatik.
Einführung in die Programmierung Wintersemester 2011/12 Prof. Dr. Günter Rudolph Lehrstuhl für Algorithm Engineering Fakultät für Informatik TU Dortmund.
Einführung in die Programmierung Wintersemester 2008/09 Prof. Dr. Günter Rudolph Lehrstuhl für Algorithm Engineering Fakultät für Informatik TU Dortmund.
Einführung in die Informatik für Naturwissenschaftler und Ingenieure (alias Einführung in die Programmierung) (Vorlesung) Prof. Dr. Günter Rudolph Fachbereich.
Einführung in die Informatik für Naturwissenschaftler und Ingenieure
Einführung in die Programmierung Wintersemester 2008/09 Prof. Dr. Günter Rudolph Lehrstuhl für Algorithm Engineering Fakultät für Informatik TU Dortmund.
Einführung in die Informatik für Naturwissenschaftler und Ingenieure (alias Einführung in die Programmierung) (Vorlesung) Prof. Dr. Günter Rudolph Fakultät.
Einführung in die Informatik für Naturwissenschaftler und Ingenieure
Einführung in die Informatik für Naturwissenschaftler und Ingenieure (alias Einführung in die Programmierung) (Vorlesung) Prof. Dr. Günter Rudolph Fachbereich.
Einführung in die Informatik für Naturwissenschaftler und Ingenieure (alias Einführung in die Programmierung) (Vorlesung) Prof. Dr. Günter Rudolph Fachbereich.
Einführung in die Informatik für Naturwissenschaftler und Ingenieure (alias Einführung in die Programmierung) (Vorlesung) Prof. Dr. Günter Rudolph Fachbereich.
Einführung in die Informatik für Naturwissenschaftler und Ingenieure (alias Einführung in die Programmierung) (Vorlesung) Prof. Dr. Günter Rudolph Fachbereich.
Einführung in die Informatik für Naturwissenschaftler und Ingenieure (alias Einführung in die Programmierung) (Vorlesung) Prof. Dr. Günter Rudolph Fachbereich.
Einführung in die Informatik für Naturwissenschaftler und Ingenieure (alias Einführung in die Programmierung) (Vorlesung) Prof. Dr. Günter Rudolph Fakultät.
Einführung in die Informatik für Naturwissenschaftler und Ingenieure (alias Einführung in die Programmierung) (Vorlesung) Prof. Dr. Günter Rudolph Fachbereich.
Einführung in die Programmierung
Informatik 1 Letzte Übung.
Prozeduren und Funktionen
Dynamische Datentypen
Felder (Arrays) und Zeiger (Pointers) - Teil II Zeichen, Texte, String Matching; Mehrdimensionale Felder; kürzeste Wege.
Ganze Zahlen Die Typen int, unsigned int; Auswertung arithmetischer Aus-drücke, arithmetische Operatoren.
Einführung in die Informatik für Naturwissenschaftler und Ingenieure (alias Einführung in die Programmierung) (Vorlesung) Prof. Dr. Günter Rudolph Fachbereich.
Grundlagen wissenschaftlichen Arbeitens An Overview of C++ Ali CICEK
Arrays / Felder Themen: Arrays / Felder / Vektoren Was soll das eigentlich? Erstellen von Arrays Arrays auslesen. Wie sie verwaltet werden.
Repetitorium PG : Erste Schritte FH-Darmstadt, FB Informatik.
Polymorphie (Vielgestaltigkeit). Wenn eine Methode, wie z.B. print für verschiedene Programmteile steht (und z.B. einmal Objekte verschiedener Klassen.
early binding (frühe Bindung) late binding (späte Bindung)
A) Erklären Sie den Datentyp char. b) Erklären Sie den Datentyp Struct c) Erklären Sie die Wirkungsweise des Operators & bei Anwendung im Zusammenhang.
1 // Laengste Zeile bestimmen // // Liest die Eingabe Zeichen fuer Zeichen, bis // das erscheint. // Die laengste Zeile wird ausgegeben (bei.
Erweiterte Zuweisungskompatibilität. Wie kann man Objekte verschiedener Klassen einer Klassenhierarchie einander zuweisen ?
Namensräume (namespaces). verwendet man umfangreiche eigene und fremde Bibliotheken (Sammlungen von Funktionen) so ist die Wahrscheinlichkeit groß, daß.
Einführung in die Programmierung Wintersemester 2015/16 Prof. Dr. Günter Rudolph Lehrstuhl für Algorithm Engineering Fakultät für Informatik TU Dortmund.
Die STL. Schreiben und Lesen von Dateien  Einbinden von  Lesen und Schreiben über stream-Objekte Streams führen Transformationen zwischen Programmobjekten.
Einführung. Ziel der Veranstaltung  Vermittlung von Grundkenntnissen in C++  Solide Basis für anschließende Weiterentwicklung  Fähigkeit, kleine Programme.
Tutorium Software-Engineering SS14 Florian Manghofer.
Tutorium Software-Engineering SS14 Florian Manghofer.
Tutorium Software-Engineering SS14 Florian Manghofer.
Dynamischer Speicher malloc wird in c++ eher nicht mehr verwendet.
Programmieren in C / C++ Erste Schritte mit C++ Klassen und Objekte
Hochschule Fulda – FB AI Sommersemester 2017
Programmieren in C Wie speichert C
Einführung in die Programmierung
Referenzen In c kennen wir gewöhnliche Variablen und Pointer.
Einführung in die Programmierung
Test - Beginn Die Verwendung von Unterlagen ist nicht zulässig. Entfernen Sie daher alle Unterlagen und sonstigen Utensilien. Tragen Sie Ihren Namen, Ihre.
Einführung in die Programmierung
Einführung in die Programmierung
Einführung in die Programmierung
Einführung in die Programmierung
 Präsentation transkript:

Repetitorium PG : Standard Template Library FH-Darmstadt, FB Informatik

Rep. PG1 – Kap. 4: STLDipl. Inf. (FH) Michael Krauß2/19 Übersicht STL-Funktionen vector Suchen Sortieren Templates

Rep. PG1 – Kap. 4: STLDipl. Inf. (FH) Michael Krauß3/19 STL - include #include // ist bekannt #include // für fill #include // für accumulate using namespace std; besser: using std::cin; using std::cout;

Rep. PG1 – Kap. 4: STLDipl. Inf. (FH) Michael Krauß4/19 fill int a2[SIZE]; //,->Füll-Objekt fill( &a2[0], &a2[SIZE], 1 ); /* '&' Adress-Operator (Achtung: Nicht verwechseln mit "call by reference"! ) Ersetzt jedes Element im Bereich durch eine Kopie des übergebenen Objekts ( ) */ cout << "a2: "; show(a2)

Rep. PG1 – Kap. 4: STLDipl. Inf. (FH) Michael Krauß5/19 weitere… copy( &a1[0], &a1[SIZE], &a2[0] ); //Kopiert Elem. von einem Bereich in einen anderen( ) swap_ranges( &a1[0], &a1[SIZE], &a2[0] ); // Tauscht Elemente 2er Bereiche aus ( ) cout << accumulate( &a1[0], &a1[SIZE], 0 ) << endl; // Addiert alle Elemente eines Bereichs ( )

Rep. PG1 – Kap. 4: STLDipl. Inf. (FH) Michael Krauß6/19 …noch weitere partial_sum( &a1[0], &a1[SIZE], &a3[0] ); // Berechnet die Partialsummen der Arrayelemente und legt sie im Bereich beginnend bei a1[0] ab. reverse( &a3[0], &a3[SIZE] ); // Invertiert die Reihenfolge der Elemente im Bereich random_shuffle( &a3[0], &a3[SIZE] ); // Ordnet Elemente des Bereichs zufällig um.

Rep. PG1 – Kap. 4: STLDipl. Inf. (FH) Michael Krauß7/19 Klasse vector vordefinierter abstrakter Datentyp für komfortable 1d- Arrays (#include ) Containerklasse. Container enthalten und verwalten eine Menge von Objekten. sequentieller Container homogener Datentyp, alle Elemente vom gleichen Typ dynamische Datenstruktur, zur Laufzeit ihre Größe ändern wahlfreien Zugriff auf Elemente mit []-Operator Daten schnell sortieren, lesen und schreiben

Rep. PG1 – Kap. 4: STLDipl. Inf. (FH) Michael Krauß8/19 Deklaration std::vector v; –type: int, float, Account etc. vector functions –vector v(&a[0], &a[SIZE]) //Creates vector –v.size() //Current size of vector –v.capacity() //size before reallocating memory –v.clear() //Erases entire container –v.push_back(value) //Add element to end –v.front(), v.back() //Return first and last element –v[elementNumber] = value; //Assign value to an element –v.at[elementNumber] = value; //range checking, out_of_bounds exc. –v.reserve(n); //makes the capacity of v at least n

Rep. PG1 – Kap. 4: STLDipl. Inf. (FH) Michael Krauß9/19 Beispiel std::vector intVector;//Objekt mit int-Werten erzeugen cout << "Anzahl gespeicherter Elemente zu Beginn: „ << intVector.size() << "\nAnzahl reservierter Speicherplaetze: " << intVector.capacity(); // Funktion push_back kennt jede Sequenz- Containerklasse intVector.push_back( 2 );

Rep. PG1 – Kap. 4: STLDipl. Inf. (FH) Michael Krauß10/19 STL-Fkt. für vector-Objekte #include #include #include #include using namespace std; void main () { // Erzeugt vector v1 mit Elementen des Arrays a bis zu (aber nicht einschließlich) a[SIZE]  In der STL sind Elemement-Bereiche immer als ein rechtsseitig offenes Intervall definiert: [1. Element, …, 1.Element nach dem Ende) vector v1( &a1[0], &a1[SIZE] ); // Erzeugt vectors aus SIZE Elementen mit Wert 0 vector v2(SIZE,0), v3(SIZE,0); // Anwendung von fill analog zur Anwendung mit Arrays fill( &v2[0], &v2[SIZE], 1 ); // vector-Objekte sind gut vorbereitet: begin() und end() sind Akzessoren, welche die Adressen zurückliefern. fill( v2.begin(), v2.end(), 1 ); }

Rep. PG1 – Kap. 4: STLDipl. Inf. (FH) Michael Krauß11/19 Suchen und Aufwand Aufwand –konstant –linear –quadratisch –logarithmisch –exponentiell

Rep. PG1 – Kap. 4: STLDipl. Inf. (FH) Michael Krauß12/19 Suche und Aufwand Linerares Suchen –linearer Aufwand Binäres Suchen –logarithmischer Aufwand

Rep. PG1 – Kap. 4: STLDipl. Inf. (FH) Michael Krauß13/19 Binäres Suchen gefunden = FALSE anfang = 1 ende = n SOLANGE ( anfang <= ende ) && ( ! gefunden ) pos = ( anfang + ende ) / 2 f [pos] > w ? ja nein ende = pos - 1 f [pos] < w ? nein anfang = pos +1 ja gefunden = TRUE

Rep. PG1 – Kap. 4: STLDipl. Inf. (FH) Michael Krauß14/19 Sortieren Sortieren ist ein Vorgang, der eine Gruppe von ähnlichen Informationen in auf oder absteigender Folge anordnet. Bubble Sort Insertion Sort Selection Sort Quick Sort (Partition-Exchange-Sort)

Rep. PG1 – Kap. 4: STLDipl. Inf. (FH) Michael Krauß15/19 Quick Sort links = l rechts = r grenzwert = feld [ ( l + r ) / 2 ] SOLANGE feld [ links ] < grenzwert links = links + 1 SOLANGE feld [ rechts ] > grenzwert rechts = rechts - 1 links <= rechts ? janein links < rechts ? ja nein hilfe = feld [ links ] feld [ links ] = feld [ rechts ] feld [ rechts ] = hilfe links = links + 1 rechts = rechts - 1 SOLANGE links <= rechts l < rechts ? janein r > links ? nein ja sort ( links, r ) sort ( l, rechts )

Rep. PG1 – Kap. 4: STLDipl. Inf. (FH) Michael Krauß16/19 Sortieralgorithmen der STL STL stellt 3 generische Sortieralgorithmen zur Verfügung: – sort, stable_sort und partial_sort. Alle sind als Funktions- Template typunabhängig implementiert. Vorbedingung: –sequentielle Container (z.B C-Array, string, vector, … ) Verwendete Ordnungsrelation: –operator< für den Elementtyp (default) oder benutzerdefiniert (Predicate-Objekt; siehe PG2)

Rep. PG1 – Kap. 4: STLDipl. Inf. (FH) Michael Krauß17/19 Templates… C++ unterscheidet zwischen Funktionstemplates (dieses Kapitel) und Klassentemplates C++ Templates ermöglichen generische Programmierung. Das ist Programmierung unabhängig vom speziellen Objekt-Typ Templates sind Schablonen mit parametrisierten Datentypen d.h. mit Platzhaltern für Typen (Typ- Parameter oder Proxy-Parameter oder Wild-Card- Parameter).

Rep. PG1 – Kap. 4: STLDipl. Inf. (FH) Michael Krauß18/19 Templates… So wie Funktionen zur Laufzeit die deklarierten Parameter übergeben bekommen, werden bei Templates dem Compiler zur Compilezeit die deklarierten Typparameter übergeben. Dieser setzt die übergebenen Aktual- Typparameter dann anstelle der Platzhalter-Typen ein.

Rep. PG1 – Kap. 4: STLDipl. Inf. (FH) Michael Krauß19/19 Beispiel für Templates früher: void swap( int& a, int& b ) { int tmp(a); a = b; b = tmp ; } jetzt: template void swap( T& a, T& b ){ T tmp(a); a = b; b = tmp ; } void main(){ int a=5, b=6; swap( a, b ); double x=2.0, y=3.0; swap( x, y ); swap( a, x ); }