Die Präsentation wird geladen. Bitte warten

Die Präsentation wird geladen. Bitte warten

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

Ähnliche Präsentationen


Präsentation zum Thema: "Repetitorium PG1 05.09. - 09.09.2005 4: Standard Template Library FH-Darmstadt, FB Informatik."—  Präsentation transkript:

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

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

3 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;

4 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)

5 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 ( )

6 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.

7 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

8 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

9 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 );

10 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 ); }

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

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

13 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

14 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)

15 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 )

16 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)

17 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).

18 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.

19 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 ); }


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

Ähnliche Präsentationen


Google-Anzeigen