1 / 19

Repetitorium PG1 05.09. - 09.09.2005

Repetitorium PG1 05.09. - 09.09.2005. 4: Standard Template Library FH-Darmstadt, FB Informatik. Übersicht. STL-Funktionen vector Suchen Sortieren Templates. STL - include. #include <iostream> // ist bekannt #include < algorithm > // für fill #include < numeric > // für accumulate

gustav
Download Presentation

Repetitorium PG1 05.09. - 09.09.2005

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. Repetitorium PG105.09. - 09.09.2005 4: Standard Template Library FH-Darmstadt, FB Informatik

  2. Übersicht • STL-Funktionen • vector • Suchen • Sortieren • Templates Dipl. Inf. (FH) Michael Krauß

  3. STL - include #include <iostream> // ist bekannt #include <algorithm> // für fill #include <numeric> // für accumulate using namespace std; besser: using std::cin; using std::cout; Dipl. Inf. (FH) Michael Krauß

  4. 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 (<algorithm>) */ cout << "a2: "; show(a2) Dipl. Inf. (FH) Michael Krauß

  5. weitere… • copy( &a1[0], &a1[SIZE], &a2[0] ); //Kopiert Elem. von einem Bereich in einen anderen(<algorithm>) • swap_ranges( &a1[0], &a1[SIZE], &a2[0] ); // Tauscht Elemente 2er Bereiche aus (<algorithm>) • cout << accumulate( &a1[0], &a1[SIZE], 0 ) << endl; // Addiert alle Elemente eines Bereichs (<algorithm>) Dipl. Inf. (FH) Michael Krauß

  6. …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. Dipl. Inf. (FH) Michael Krauß

  7. Klasse vector • vordefinierter abstrakter Datentyp für komfortable 1d-Arrays • (#include <vector>) • 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 Dipl. Inf. (FH) Michael Krauß

  8. Deklaration • std::vector <type> v; • type: int, float, Account etc. • vector functions • vector<type> 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 Dipl. Inf. (FH) Michael Krauß

  9. Beispiel std::vector< int > 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 ); Dipl. Inf. (FH) Michael Krauß

  10. STL-Fkt. für vector-Objekte #include <iostream> #include <algorithm> #include <numeric> #include <vector> 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 <int> v1( &a1[0], &a1[SIZE] ); // Erzeugt vectors aus SIZE Elementen mit Wert 0 vector <int> 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 ); } Dipl. Inf. (FH) Michael Krauß

  11. Suchen und Aufwand • Aufwand • konstant • linear • quadratisch • logarithmisch • exponentiell Dipl. Inf. (FH) Michael Krauß

  12. Suche und Aufwand • Linerares Suchen • linearer Aufwand • Binäres Suchen • logarithmischer Aufwand Dipl. Inf. (FH) Michael Krauß

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

  14. 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) Dipl. Inf. (FH) Michael Krauß

  15. 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 ? ja nein 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 ? ja nein sort ( l, rechts ) r > links ? ja nein sort ( links, r ) Quick Sort Dipl. Inf. (FH) Michael Krauß

  16. 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) Dipl. Inf. (FH) Michael Krauß

  17. 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 Schablonenmit parametrisierten Datentypend.h. mit Platzhaltern für Typen (Typ-Parameter oder Proxy-Parameter oder Wild-Card-Parameter). Dipl. Inf. (FH) Michael Krauß

  18. 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. Dipl. Inf. (FH) Michael Krauß

  19. Beispiel für Templates • früher: void swap( int& a, int& b ) { int tmp(a); a = b; b = tmp ; } • jetzt: template < class T > 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 ); } Dipl. Inf. (FH) Michael Krauß

More Related