Standard Template Library

Größe: px
Ab Seite anzeigen:

Download "Standard Template Library"

Transkript

1 Standard Template Library Ralph Thesen Institut für Numerische Simulation Rheinische Friedrich-Wilhelms-Universität Bonn Seminar: Technische Numerik Dezember 2009

2 Überblick 1 Einleitung 2 Templates 3 STL - Grundsteine vector vs. array iterator 4 Container Sequenz-Container Assoziative Container 5 Funktoren 6 Algorithmen transform sort 7 Smart-Pointer 8 Anhang

3 Vorwarnung Vorwort Die STL ist kein formaler Teil des C++-Standards. Das ist aber in diesem Jahrtausend kein Problem mehr. Die STL gibt es für alle Betriebssyteme, Compiler und Architekturen, auf denen es C++ gibt. (u.a. wurde die STL geschaffen, um Container unabhängig von o.g. Bedingungen realisieren zu können.) Die STL ist in C++ für C++ geschrieben. Keine Panik! Es werden viele vollständige Beispiele gezeigt. Wir kratzen heute nur an der Oberfläche.

4 Templates

5 Was sind Templates? Wikipedia: Templates sind Programmgerüste, die bei Bedarf vom Compiler instantiiert, also als normale Klassen oder Funktionen, zur Verfügung gestellt werden. Mit anderen Worten: Templates sind (nicht nur übersetzt) Schablonen, die der Compiler bei Bedarf für uns ausmalt. Quelle:

6 Funktions Templates Ersetze: int max ( int x, int y) { if (x < y) return y; else return x; Durch: template < class T > T max (T x, T y) { if (x < y) return y; else return x; Alternativ zu Templates könnte man die Funktion überladen, was jedoch viel Schreibarbeit benötigen würde. template<typename T> funktioniert analog zu template<class T>.

7 Klassen Templates Ersetze: class intcontainer { int data ; public : void set ( int i) { data = i; int get () { return data ; ; Durch: template < class T > class Container { T data ; public : void set ( T i) { data = i; T get () { return data ; ; Wir haben uns einen Container für beliebige Klassen gebaut. Auch Container<BuntesMegaObjekt> mycontainer; klappt. Auch hier gilt: template<typename T> funktioniert analog zu template<class T>.

8 Templates - Ein komplexeres Beispiel template < class T, int N > class mysequence { T memblock [N]; public : void setmember ( int x, T value ); T getmember ( int x); ; template < class T, int N > void mysequence <T,N >:: setmember ( int x, T value ) { memblock [x]= value ; template < class T, int N > T mysequence <T,N >:: getmember ( int x) { return memblock [ x]; Template ist abhängig vom Datentyp T und der Anzahl N.

9 Templates Man kann class -Templates auch spezialisieren, so dass verschiedene Datentypen verschieden behandelt werden. Man kann Templates mit non-type Parameter bauen.... und diese spezialisieren. Wichtig ist: Erst beim kompilieren wird entschieden, was mit dem Template passiert. Aber: Um die STL zu benutzen, muss man nicht in die Tiefen der Metaprogrammierung abtauchen, denn das ist alles bereits erledigt.

10 STL - Grundsteine

11 Array Arrays kennen wir aus C, wir haben sie verflucht, und wir werden es weiterhin (sollten wir sie wirklich noch benutzen müssen). Auf Arrays greift man mit Pointern zu, mit Pointern in den Speicher und nicht immer an die Stelle, an die man auch zugreifen möchte. # include < iostream > /* const is necessary */ const int N =3; int main () { int numbers [N]; /* insert some numbers */ numbers [0]=0; numbers [1]=42; numbers [2]=3; /* output data */ std :: cout << numbers [0] << std :: endl ;

12 Vector Ein Sequenz-Container aus der STL. Wir benutzen ihn hier analog zu einem Array. # include < iostream > # include < vector > int main () { std :: vector <int > numbers (3); /* insert some numbers */ numbers [0]=0; numbers [1]=42; numbers [2]=3; /* output data */ std :: cout << numbers [0] << std :: endl ;

13 Array - Größe ändern # include <iostream > int main () { int n = 3; /* create array of size n */ int * nums = new int [n]; /* insert data */ for ( int i =0; i<n; i ++) nums [ i]=i; /* resize array */ int * more_nums = new int [ n +1]; /* copy data */ for ( int i =0; i<n; i ++) more_nums [i]= nums [i]; /* destroy the old array */ delete [] nums ; /* set pointer to new array */ nums = more_nums ; /* add data */ nums [n]=n; /* clean up */ delete [] nums ; Das ließe sich auch auf die C-Methode mit malloc, realloc und free machen, aber auch das ist gruselig.

14 Vector - Größe ändern Wir benutzen den <vector> und überlassen diesem das Speichermanagement. # include < iostream > # include < vector > int main () { int n = 3; /* create int vector of size n */ std :: vector <int > numbers (n); /* insert data */ for ( int i =0; i<n; i ++) numbers [i]=i; /* resize vector */ numbers. resize (n +1); /* add data */ numbers [n]=n; /* don t care about resizing : */ numbers. push_ back ( 42 ); Auch wenn wir die Größe unserer Daten kennen und nichts dynamisch ändern müssen, lohnt es sich, <vector> einzusetzen.

15 2D-Array # include < cassert > /* const is necessary */ const int N =200; int main () { int matrix [N][N]; /* insert some numbers */ for ( int i =0; i<n; i ++) for ( int j =0; j<n; j ++) matrix [i][j]=i*n+j; /* check numbers */ for ( int i =0; i<n; i ++) for ( int j =0; j<n; j ++) assert ( matrix [i][j] == i*n+j); Das Beispiel, wie man die Größe eines 2D-Array dynamisch ändert, bleibt erspart. Kann ein Vector auch solche Strukturen beinhalten?

16 2D-Vector # include <cassert > # include <vector > using namespace std ; int N =200; int main () { vector < vector <int > > matrix (N, vector <int >(N)); /* insert some numbers */ for ( int i =0; i<n; i ++) for ( int j =0; j<n; j ++) for ( int k =0; k<n; k ++) matrix [i][j]=i*n+j; /* check numbers */ for ( int i =0; i<n; i ++) for ( int j =0; j<n; j ++) for ( int k =0; k<n; k ++) assert ( matrix [i][j] == i*n+j); Ein vector kann auch einen vector beinhalten. Oder ein set. Oder eine map. Oder...

17 <vector> Sequenz-Container, dynamischer Array. Mit push back() kann man Elemente am Ende des Vectors hinzufügen. Mit operator[] oder at() kann man auf Elemente zugreifen. Mit size() erfährt man die Größe des Vectors, mit capacity() die Kapazität. Größe kann man mit resize() und die Kapazität mit reserve() beeinflussen. Weiterhin kann man auf einen Vector mit einem Iterator zugreifen.

18 iterator (1) STL Container stellen Iteratoren zur Verfügung. z.b. vector<int>::iterator i,j; Ein Iterator bezeichnet ein Element einer Sequenz. Sequenz-Container stellen begin() und end() zur Verfügung, die Iteratoren zurückgeben. Beachte: [begin:end[ Iterator kann hinter das letzte Element zeigen. i==j vergleicht zwei Iteratoren. ++i verschiebt einen Iterator zum nächsten Element. *i zeigt auf das Element selbst.

19 iterator - Beispiel # include < iostream > # include < vector > int main () { std :: vector <int > nums ; /* insert data */ nums. push_back (0); nums. push_back (42); nums. push_back (3); /* declare iterator */ std :: vector <int >:: iterator it; /* print vector using iterator */ for (it = nums. begin (); it < nums. end (); it ++ ) std :: cout << *it << std :: endl ; /* change the first entry using the iterator */ * nums. begin () = 1; /* change the second (=++ first ) entry */ *(++ nums. begin ()) = 2; /* print again */ for (it = nums. begin (); it < nums. end (); it ++ ) std :: cout << *it << std :: endl ;

20 iterator (2) Iteratoren erleichtern den Zugriff auf Container. Iteratoren funktionieren als Schnittstelle zwischen Containern, Algorithmen und dem ganzen Rest. const iterator const iterator!= const iterator iterator const iterator const iterator it++ ok ok val=*it; ok ok ok *it=val; ok ok

21 Container

22 Sequenz-Container Neben <vector> gibt es noch <deque> und <list>. <vector> und <deque> stellen Random-Access-Iteratoren (z.b. it+=5; ), <list> nur bidirektionale Iteratoren (z.b. it++ ) zur Verfügung. Jeder Sequenz-Container verspricht für bestimmte Operationen verschiedene Kosten. vector deque list bidirectional access O(1) O(1) O(1) random access O(1) O(1) O(n) prepend O(n) O(1)* O(1) append O(1) O(1)* O(1) random insert O(n) O(n) O(1) (* amortisierte Kosten)

23 Sequenz-Container und Iteratoren Sequenz-Container stellen die Funktionen assign, insert und erase zur Verfügung, die mit Iteratoren arbeiten. # include <iostream > # include <list > # include <vector > /* delcare a typedef */ typedef std :: vector <int >:: iterator ivec_iter ; int main () { int arr [] = {1,2,3,4; std :: vector <int > v; v. assign (arr, arr +4); /* insert something at the beginning */ v. insert (v. begin (),0); /* erase same at the end */ v. erase (v. end () -2,v. end ()); for ( ivec_iter it=v. begin (); it <v. end (); it ++) std :: cout << *it << std :: endl ; /* create a new list */ std :: list <int > l; /* assign a range from vector v to list l*/ l. assign (v. begin ()+1, v. end () -1);

24 In-/Output-Iteratoren In- und Output-Iteratoren sind Forward-Iteratoren. Input-Iteratoren kann man nur lesen, Output-Iteratoren nur schreiben. # include <iostream > /* std :: cout */ # include <vector > # include <iterator > using namespace std ; int main () { int arr [] = {1,2,3; /* initialize the vector using the array pointer */ vector <int > v(arr, arr +3); /* create an ostream_iterator of the type string */ ostream_iterator < string > o_i_string (cout,"\n"); /* write something to the ostream */ o_i_string =" Hello World!"; /* copy the vector <int > to an ostream_iterator <int > */ copy (v. begin (),v. end (), ostream_iterator <int >( cout,"\n" )); /* look a std :: string */ string str = " Hello World!"; /* use an iterator to access str */ string :: iterator istr = str. begin ()+6; cout << * istr << endl ;

25 Assoziative Container set Menge von eindeutigen Objekten. Der Wert entspricht dem Schlüssel. multiset Menge von Objekten. Der Wert entspricht dem Schlüssel. map Menge von Paaren von Schlüsseln und Werten. Die Schlüssel müssen eindeutig sein. multimap Menge von Paaren von Schlüsseln und Werten. Die Schlüssel dürfen mehrfach vorkommen. Assoziative Container unterstützen folgende Funktionen: insert() count() find() erase()

26 <multiset> # include <set > /* header for set and multiset */ # include < iostream > int main () { int arr [] = {1,2,3,4,2,4; /* init multiset with array values */ std :: multiset <int > ms(arr, arr +6); std :: multiset <int >:: iterator it; /* search n destroy */ it=ms. find (1); ms. erase (it ); /* without an iterator */ ms. erase (ms. find (3)); /* print values */ for (it=ms. begin (); it!= ms.end (); it ++) std :: cout << *it << std :: endl ; /* count values */ std :: cout << " count (4): " << ms. count (4) <<std :: endl ;

27 <map> # include <iostream > # include <map > using namespace std ; int main () { map < string, double > numbers ; // declare map map < string, double >:: iterator it; // declare iterator // declare return value pair <map < string, double >:: iterator,bool > retval ; // insert data numbers. insert ( pair < string, double >(" zero ",0.) ); numbers. insert ( pair < string, double >(" answer ",42) ); // try to insert " answer " again. retval = numbers. insert ( pair < string, double >(" answer ",41) ); if ( retval. second == false ) { cout << " answer already exists with the value " // retval. first contains an iterator pointing to the // existing pair key => value << retval. first -> second << "." << endl ; cout << " numbers :" << endl ; for ( it= numbers. begin () ; it!= numbers. end (); it ++ ) cout << (* it ). first << " => " << (* it ). second << endl ;

28 Funktoren

29 Funktionsobjekte Funktoren Ein Funktionsobjekt ist ein Objekt, das den operator() besitzt und somit mit derselben Syntax wie eine Funktion aufgerufen werden kann. # include < functional > # include < iostream > int main () { // create binary greater - functor std :: greater <int > greater ; if ( greater (4,2)) std :: cout << "4 is greater than 2." << std :: endl ; // create unary negate - functor std :: negate < double > neg ; std :: cout << neg (2) << std :: endl ;

30 Funktor im Eigenbau # include <functional > # include <iostream > # include <math.h> /* fabs () */ /* our new functor */ template <class T> class equal_enough : /* derive from binary_function */ public std :: binary_function <T, T, bool > { public : bool operator ()( const T &a, const T & b) const { return ( fabs (a-b) <10e -14); ; int main () { /* create equal - functor */ std :: equal_to < double > equal ; /* create my equal - enough - functor */ equal_enough < double > equal_e ; if ( equal (0.,1e -16)) std :: cout <<"0 equals 1e -16 " <<std :: endl ; if ( equal_e (0.,1e -16)) std :: cout <<"0 and 1e -16 are equal enough " <<std :: endl ;

31 Adapter Mit einem Adapter kann man einen Funktor aus existierenden Funktionen ableiten. Man kann ein Funktionsobjekt generieren, das eine existierende (Member-)Funktion aufruft. ptr fun() erzeugt einen Funktor für eine Funktion. z.b. std::ptr fun(&atoi) ; ptr fun ref arbeitet analog, nur dass das Objekt als Referenz übergeben wird. mem fun() erzeugt einen Funktor für eine Memberfunktion. z.b. std::mem fun(&std::string::length) mem fun ref arbeitet analog, nur dass das Objekt als Referenz übergeben wird. Die Adapter sind Template-Klassen, deren Template-Parameter vom Compiler automatisch gewählt werden.

32 Algorithmen

33 Algorithmen Algorithmen in der C++ STL unterscheiden sich von denen anderer Programmiersprachen. Normales Konzept: Jede Container-Klasse stellt gewisse Operationen (Sortieren, Suchen von Nachbarn, etc.) selbst zur Verfügung. In der STL arbeiten die Algorithmen mit Iteratoren und somit mit jedem Container, der diese zur Verfügung stellt. Um Algorithmen zu benutzen, muss man die Header-Datei <algorithm> einbinden.

34 transform transform arbeitet einen Bereich ab, schiebt das zu transformierende in eine Funktion und schreibt deren Ergebnis in den Zielbereich. # include <iostream > # include <vector > # include <string > # include <algorithm > /* we uses the transform - algorithm */ # include <functional > /* we uses mem_fun_ref */ using namespace std ; int main () { vector < string > num_vec ; num_vec. push_back (" standard template library "); num_vec. push_back (" stl "); /* create target vector ( and resize right ) */ vector <int > len_vec ( num_vec. size ()); /* the transform algorithm */ transform ( num_vec. begin (), num_vec. end (), /* uses a the string - member - function length */ len_vec. begin (), mem_fun_ref (& string :: length )); /* print result */ for ( unsigned int i =0; i< num_vec. size (); i ++) { cout << num_vec [i] <<" has " << len_vec [i] <<" letters." << endl ;

35 sort sort sortiert einen gegebenen Bereich und benutzt eine gegebene Vergleichsfunktion, im Default: less. # include <iostream > # include <vector > # include <algorithm > # include <iterator > int main () { int arr [] = {3,1,2,5,4; std :: vector <int > vec (arr, arr +5); std :: vector <int >:: iterator it; /* sort the first the elementes of vec */ std :: sort ( vec. begin (), vec. begin ()+3); /* use greater to sort the whole vextor */ std :: sort ( vec. begin (), vec. end (), std :: greater <int >()); /* btw : copy is an algorithm, too */ std :: copy ( vec. begin (), vec. end (), std :: ostream_iterator <int >( std :: cout,"\n" )); return 0;

36 Smart-Pointer

37 Smart-Pointer Speicherverwaltung kann aufwendig werden. Wenn zwei (oder mehr) Objekte Pointer auf denselben Bereich haben, woher weiß ein Objekt, dass es den Speicher freigeben kann? Die anderen Objekte erwartet weiterhin, dass der Bereich reserviert ist. delete kann nicht stumpf im Destructor ausgeführt werden. Welches Objekt gibt den Speicher frei? Wie verhindert man mehrfaches delete? Smart-Pointer sind eine elegante Lösung für diese Problematik.

38 auto ptr # include < memory > /* auto_ ptr lives here */ class A { public : void do_something () { /* a smart pointer as member variable */ std :: auto_ptr <int > i; ; /* the usual way for allocating an object */ void f() { A* ptr = new A; ptr -> do_something (); delete ptr ; /* here we use the smart pointer auto_ptr <> */ void g() { std :: auto_ptr <A > ptr ( new A ); ptr -> do_something (); int main () { f (); g ();

39 auto ptr / shared ptr / shared array std::auto ptr<> aus <memory> haben immer genau einen Besitzer. wechseln den Besitzer, wenn sie neu zugewiesen werden. können nicht in Standard-Container gespeichert werden. lassen sich nicht mit Arrays verwenden. boost::shared ptr<> aus <boost/shared ptr.hpp> verwenden Referenzzähler für das Zählen der Besitzer. werden freigegeben, wenn der letzte Besitzer seinen Gültigkeitsbereich verlässt. können in Standard-Container gespeichert werden. boost::shared array<> aus <boost/shared array.hpp> stellt Smart-Pointer für Arrays zur Verfügung.

40 shared ptr # include <iostream > # include <vector > # include <set > # include <boost / shared_ptr.hpp > /* dummy class */ class A { public : A( int _x) : x(_x ){; ~A (){ std :: cout <<"~A x=" <<x<< std :: endl ;; int x; ; int main () { /* we use a set and a vector of our smart pointer */ std :: vector < boost :: shared_ptr <A> > A_vector ; std :: set < boost :: shared_ptr <A> > A_set ; /* create a shared pointer and initialize */ boost :: shared_ptr <A> A_ptr ( new A( 0 ) ); A_ptr. reset ( new A( 1 ) ); /* reset to new pointer */ /* insert in vector and set */ A_set. insert ( A_ptr ); A_vector. push_back ( A_ptr ); /* */ A_ptr. reset ( new A( 2 ) ); /* reset to new pointer */ A_vector. push_back ( A_ptr ); A_set. clear (); /* clear the set, remove all pointer */ for ( unsigned int i =0;i< A_vector. size (); i ++) std :: cout << A_vector [i]->x << std :: endl ;

41 Anhang

42 Was ich nicht erzählt habe...

43 Literatur Wem das zu langweilig wird MultiProcessing Template Library

Einführung in die STL

Einführung in die STL Einführung in die STL Fimberger Lucia lfimberg@cosy.sbg.ac.at Nidetzky Marion mnidetzk@cosy.sbg.ac.at Was ist die STL? Abkürzung für Standard Template Library Eine generische Bibliothek Ist kaum objektorientiert,

Mehr

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

Mapra: C++ Teil 4. Felix Gruber. 6. Mai IGPM, RWTH Aachen. Felix Gruber (IGPM, RWTH Aachen) Mapra: C++ Teil 4 6. Mapra: C++ Teil 4 Felix Gruber IGPM, RWTH Aachen 6. Mai 2015 Felix Gruber (IGPM, RWTH Aachen) Mapra: C++ Teil 4 6. Mai 2015 1 / 22 Themen vom letzten Mal Kompilieren mit Makefiles Ein-/Ausgabe über Dateien

Mehr

Einführung in die STL

Einführung in die STL 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

Mehr

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

C++ Teil 6. Sven Groß. 27. Mai Sven Groß (IGPM, RWTH Aachen) C++ Teil Mai / 14 C++ Teil 6 Sven Groß 27. Mai 2016 Sven Groß (IGPM, RWTH Aachen) C++ Teil 6 27. Mai 2016 1 / 14 Themen der letzten Vorlesung Musterlösung A2 Wdh.: Zeiger und Felder Kopieren von Feldern Dynamische Speicherverwaltung

Mehr

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

Informatik für Mathematiker und Physiker Woche 7. David Sommer Informatik für Mathematiker und Physiker Woche 7 David Sommer David Sommer 30. Oktober 2018 1 Heute: 1. Repetition Floats 2. References 3. Vectors 4. Characters David Sommer 30. Oktober 2018 2 Übungen

Mehr

Dynamische Datentypen. Destruktor, Copy-Konstruktor, Zuweisungsoperator, Dynamischer Datentyp, Vektoren

Dynamische Datentypen. Destruktor, Copy-Konstruktor, Zuweisungsoperator, Dynamischer Datentyp, Vektoren Dynamische Datentypen Destruktor, Copy-Konstruktor, Zuweisungsoperator, Dynamischer Datentyp, Vektoren Probleme mit Feldern (variabler Länge) man kann sie nicht direkt kopieren und zuweisen Probleme mit

Mehr

Informatik - Übungsstunde

Informatik - Übungsstunde Informatik - Übungsstunde Jonas Lauener (jlauener@student.ethz.ch) ETH Zürich Woche 08-25.04.2018 Lernziele const: Reference const: Pointer vector: iterator using Jonas Lauener (ETH Zürich) Informatik

Mehr

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

C++ Teil 7. Sven Groß. 3. Juni Sven Groß (IGPM, RWTH Aachen) C++ Teil 7 3. Juni / 16 C++ Teil 7 Sven Groß 3. Juni 2016 Sven Groß (IGPM, RWTH Aachen) C++ Teil 7 3. Juni 2016 1 / 16 Themen der letzten Vorlesung dynamische Speicherverwaltung (Wdh.) Cast bei Zeigern STL-Vektoren + Live Programming

Mehr

Programmier-Befehle - Woche 09

Programmier-Befehle - Woche 09 Zeiger und Iteratoren Zeiger (generell) Adresse eines Objekts im Speicher Wichtige Befehle: Definition: int* ptr = address of type int; (ohne Startwert: int* ptr = 0;) Zugriff auf Zeiger: ptr = otr ptr

Mehr

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

C++ Teil 7. Sven Groß. 30. Nov Sven Groß (IGPM, RWTH Aachen) C++ Teil Nov / 13 C++ Teil 7 Sven Groß 30. Nov 2015 Sven Groß (IGPM, RWTH Aachen) C++ Teil 7 30. Nov 2015 1 / 13 Themen der letzten Vorlesung Zeiger, Felder (Wdh.) dynamische Speicherverwaltung Sven Groß (IGPM, RWTH Aachen)

Mehr

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

C++ Teil 8. Sven Groß. 5. Dez IGPM, RWTH Aachen. Sven Groß (IGPM, RWTH Aachen) C++ Teil 8 5. Dez / 16 C++ Teil 8 Sven Groß IGPM, RWTH Aachen 5. Dez 2014 Sven Groß (IGPM, RWTH Aachen) C++ Teil 8 5. Dez 2014 1 / 16 Themen der letzten Vorlesung Casts bei Zeigern dynamische Speicherverwaltung Vektoren Typedefs

Mehr

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

Hier wird die Verwendung der Standard Template Library (kurz STL) kurz beschrieben. Inhalt 1.Verwendung der STL Grundlagen... STL Die C++ Bibliothek ist eine Sammlung von standardisierten Klassen und Containern. Zu beachten ist, dass nicht jede C++ Implementierung den ganzen Umfang der Standardbibliothek realisiert hat. Hier

Mehr

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

Mapra: C++ Teil 4. Felix Gruber, Michael Rom. 24. Mai 2016 IGPM. Felix Gruber, Michael Rom (IGPM) Mapra: C++ Teil 4 24. Mapra: C++ Teil 4 Felix Gruber, Michael Rom IGPM 24. Mai 2016 Felix Gruber, Michael Rom (IGPM) Mapra: C++ Teil 4 24. Mai 2016 1 / 25 Themen vom letzten Mal Kompilieren mit Makefiles Ein-/Ausgabe über Dateien

Mehr

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

C++ Teil 5. Sven Groß. 13. Mai Sven Groß (IGPM, RWTH Aachen) C++ Teil Mai / 18 C++ Teil 5 Sven Groß 13. Mai 2016 Sven Groß (IGPM, RWTH Aachen) C++ Teil 5 13. Mai 2016 1 / 18 Themen der letzten Vorlesung Funktionen Funktionsüberladung, Signatur Rekursion const-deklaration Referenzen

Mehr

19. STL Container Programmieren / Algorithmen und Datenstrukturen 2

19. STL Container Programmieren / Algorithmen und Datenstrukturen 2 19. STL Container Programmieren / Algorithmen und Datenstrukturen 2 Prof. Dr. Bernhard Humm FB Informatik, Hochschule Darmstadt Wintersemester 2012 / 2013 1 Agenda Kontrollfragen STL Container: Übersicht

Mehr

Informatik - Übungsstunde

Informatik - Übungsstunde Informatik - Übungsstunde Jonas Lauener (jlauener@student.ethz.ch) ETH Zürich Woche 12-23.05.2018 Lernziele Klassen Dynamic Memory Jonas Lauener (ETH Zürich) Informatik - Übung Woche 12 2 / 20 Structs

Mehr

Visuelle Kryptographie. Anwendung von Zufallszahlen

Visuelle Kryptographie. Anwendung von Zufallszahlen Visuelle Kryptographie Anwendung von Zufallszahlen Verschlüsseln eines Bildes Wir wollen ein Bild an Alice und Bob schicken, so dass Verschlüsseln eines Bildes Wir wollen ein Bild an Alice und Bob schicken,

Mehr

Verschlüsseln eines Bildes. Visuelle Kryptographie. Verschlüsseln eines Bildes. Verschlüsseln eines Bildes

Verschlüsseln eines Bildes. Visuelle Kryptographie. Verschlüsseln eines Bildes. Verschlüsseln eines Bildes Verschlüsseln eines Bildes Visuelle Kryptographie Anwendung von Zufallszahlen Wir wollen ein Bild an Alice und Bob schicken, so dass Alice allein keine Information über das Bild bekommt Bob allein keine

Mehr

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

Polymorphismus 44. Function.hpp. #include <string> Polymorphismus 44 #include Function.hpp class Function { public: virtual ~Function() {}; virtual const std::string& get_name() const = 0; virtual double execute(double x) const = 0; }; // class

Mehr

STL - std::multiset. Markus Scheidgen. 31. Mai 2002

STL - std::multiset. Markus Scheidgen. 31. Mai 2002 STL - std::multiset Markus Scheidgen 31. Mai 2002 STL - std::multiset 1 Überblick das Interface zu multiset Konzepte, Modelle - Darstellung von Eigenschaften Überblick Besonderheiten von multiset Möglichkeiten

Mehr

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

Programmierkurs C++ Templates & STL (1/2) Programmierkurs C++ Templates & STL (1/2) Prof. Dr. Stefan Fischer Institut für Telematik, Universität zu Lübeck https://www.itm.uni-luebeck.de/people/fischer #2 Templates Die wichtigsten objekt-orientierten

Mehr

Übungsstunde: Informatik 1 D-MAVT

Übungsstunde: Informatik 1 D-MAVT Übungsstunde: Informatik 1 D-MAVT Daniel Bogado Duffner Übungsslides unter: n.ethz.ch/~bodaniel Bei Fragen: bodaniel@student.ethz.ch Daniel Bogado Duffner 25.04.2018 1 Ablauf Self-Assessment Pointer Iterators

Mehr

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

C++ - Einführung in die Programmiersprache Standard Templates. Leibniz Universität IT Services Anja Aue C++ - Einführung in die Programmiersprache Standard Templates Leibniz Universität IT Services Anja Aue C++ - Standardbibliothek Standardisierte Sammlung von häufig vorkommenden Funktionen und Klassen.

Mehr

Repetitorium Programmieren I + II

Repetitorium Programmieren I + II Repetitorium Programmieren I + II Stephan Gimbel Johanna Mensik Michael Roth 6. März 2012 Agenda 1 Operatorüberladung 2 Pointer Zeigervariable 3 CopyConstructor 4 Listen 5 Array String 6 STL Container

Mehr

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

Standardbibliotheken. Datentyp bool. Eingaben 2/2. Eingaben 1/2. In C gibt es keinen logischen Datentyp Datentyp bool Standardbibliotheken Ein- und Ausgabe Vektoren Container In C gibt es keinen logischen Datentyp Abhilfe schafft Interpretation 0 == false 1 == true Das könnte so aussehen: #define false 0

Mehr

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

C++ Teil 7. Sven Groß. 26. Nov IGPM, RWTH Aachen. Sven Groß (IGPM, RWTH Aachen) C++ Teil Nov / 18 C++ Teil 7 Sven Groß IGPM, RWTH Aachen 26. Nov 2014 Sven Groß (IGPM, RWTH Aachen) C++ Teil 7 26. Nov 2014 1 / 18 Themen der letzten Vorlesung Referenzen Zeiger Felder dynamische Speicherverwaltung Sven

Mehr

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

Polymorphismus 179. Function.h. #include <string> Polymorphismus 179 #include Function.h class Function { public: virtual ~Function() {}; virtual std::string get_name() const = 0; virtual double execute(double x) const = 0; }; // class Function

Mehr

Programmier-Befehle - Woche 08

Programmier-Befehle - Woche 08 Datentypen Vektoren (mehrdim.) eines bestimmten Typs Erfordert: #include Wichtige Befehle: Definition: std::vector my vec (n rows, std::vector(n cols, init value)) Zugriff:

Mehr

Objektorientierte Programmierung mit C++ SS 2007

Objektorientierte Programmierung mit C++ SS 2007 Objektorientierte Programmierung mit C++ SS 2007 Andreas F. Borchert Universität Ulm 5. Juni 2007 Polymorphismus #include Function.h class Function { public: virtual ~Function() {}; virtual std::string

Mehr

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

4 Generische Programmierung. 4.1 Klassen-Templates (*) 4.2 Funktions-Templates (*) 4.3 Besondere Programmiertechniken (Smart Pointer) 4 Generische Programmierung 4.1 Klassen-Templates (*) 4.2 Funktions-Templates (*) 4.3 Besondere Programmiertechniken (Smart Pointer) (*) Auch in dieser Datei. V 4.05; Hon. Prof. Helmke 1 Intelligente Zeiger

Mehr

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

Mapra: C++ Teil 2. Felix Gruber, Sven Groß. 2. Mai 2017 IGPM. Felix Gruber, Sven Groß (IGPM) Mapra: C++ Teil 2 2. Mai / 11 Mapra: C++ Teil 2 Felix Gruber, Sven Groß IGPM 2. Mai 2017 Felix Gruber, Sven Groß (IGPM) Mapra: C++ Teil 2 2. Mai 2017 1 / 11 Themen vom letzten Mal Kontrollstrukturen Funktionen const Referenzen Zeiger

Mehr

kurze Wiederholung class templates

kurze Wiederholung class templates kurze Wiederholung class templates Ein class template ist ein Template, dass mit einem oder mehreren typename -Parametern implementiert wird. Um solch ein Template zu benutzen, übergibt man dem Template

Mehr

Sortierte Assoziative Container der STL

Sortierte Assoziative Container der STL Sortierte Assoziative Container der STL Speichern die Daten intern in einer Baumstruktur Elementzugriff O(log 2 N) Das mathematische Konzept einer Relation oder eine diskrete Abbildung wird mit map realisiert,

Mehr

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

C++ Teil 12. Sven Groß. 18. Jan Sven Groß (IGPM, RWTH Aachen) C++ Teil Jan / 11 C++ Teil 12 Sven Groß 18. Jan 2016 Sven Groß (IGPM, RWTH Aachen) C++ Teil 12 18. Jan 2016 1 / 11 Themen der letzten Vorlesung Wiederholung aller bisherigen Themen: Datentypen und Variablen Operatoren Kontrollstrukturen

Mehr

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

C++ Kurs Teil 3. Standard Template Library (STL) Kommunikation mit der shell Hyper Text Markup Language (HTML) C++ Kurs Teil 3 Standard Template Library (STL) Übersicht vector algorithm: sort, for_each map Kommunikation mit der shell Hyper Text Markup Language (HTML) O. Ronneberger: C++ Kurs Teil 3 Seite 1

Mehr

Programmieren in C++ Templates

Programmieren in C++ Templates Programmieren in C++ Templates Inhalt Templates Funktions- und Klassen-Templates Spezialisierung von Templates Generische Klassen Einbinden von Templates Instantiierung (implizit und explizit) Templates

Mehr

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

Wo und wie lange leben Objekte? globale Objekte lokale Objekte dynamische Objekte Wo und wie lange leben Objekte? globale Objekte lokale Objekte dynamische Objekte entstehen durch... globale Objektvereinbarung: T o; blocklokale Objektvereinbarung: {.. T o;.. durch expliziten Aufruf

Mehr

Datenkapselung: public / private

Datenkapselung: public / private 627 18. Klassen Klassen, Memberfunktionen, Konstruktoren, Stapel, verkettete Liste, dynamischer Speicher, Copy-Konstruktor, Zuweisungsoperator, Destruktor, Konzept Dynamischer Datentyp Datenkapselung:

Mehr

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

Einführung in die STL anhand eines ausgewählten Beispiels Einführung in die STL anhand eines ausgewählten Beispiels Frank M. Thiesing http://home.t-online.de/home/ frank.thiesing/stl/stl-folien.pdf Inhalt Überblick über die C++ STL Container Iteratoren Algorithmen

Mehr

Wir erinnern uns... #include <iostream> #include <vector>

Wir erinnern uns... #include <iostream> #include <vector> 165 6. C++ vertieft (I) Kurzwiederholung: Vektoren, Zeiger und Iteratoren Bereichsbasiertes for, Schlüsselwort auto, eine Klasse für Vektoren, Subskript-Operator, Move-Konstruktion, Iterator. Wir erinnern

Mehr

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

Informatik für Mathematiker und Physiker Woche 6. David Sommer Informatik für Mathematiker und Physiker Woche 6 David Sommer David Sommer October 31, 2017 1 Heute: 1. Rückblick Übungen Woche 5 2. Libraries 3. Referenzen 4. Step-Wise Refinement David Sommer October

Mehr

Angewandte Mathematik und Programmierung

Angewandte Mathematik und Programmierung Angewandte Mathematik und Programmierung Einführung in das Konzept der objektorientierten Anwendungen zu mathematischen Rechnens WS 2013/14 Operatoren Operatoren führen Aktionen mit Operanden aus. Der

Mehr

Als erstes definiere ich einen Datentyp für einen Zeiger auf eine Funktion, die ein Element der Menge bearbeiten kann:

Als erstes definiere ich einen Datentyp für einen Zeiger auf eine Funktion, die ein Element der Menge bearbeiten kann: Dokumentation Die Implementation auf Basis eines Iterators 1.Art widerspricht etwas meinem bisherigen Design, weil ich in Konflikt mit den STL-Iteratoren komme. Da aber bereits feststeht, dass das Praktikum

Mehr

Grundlagen der Informatik 12. Strukturen

Grundlagen der Informatik 12. Strukturen 12. Strukturen Strukturen und deren Komponenten Strukturen im Projekt Dynamisch erstellte Strukturen Strukturen und Operatoren Strukturen und Funktionen Einfach verkettete Liste Grundlagen der Informatik

Mehr

Advanced Programming in C

Advanced Programming in C Advanced Programming in C Pointer und Listen Institut für Numerische Simulation Rheinische Friedrich-Wilhelms-Universität Bonn Oktober 2013 Überblick 1 Variablen vs. Pointer - Statischer und dynamischer

Mehr

Die C++ Standard Template Library Andreas Obrist

Die C++ Standard Template Library Andreas Obrist Die C++ Standard Template Library 24. 06. 2004 Andreas Obrist Was dürft Ihr erwarten? 1. Teil Das Wichtigste in Kürze über die Standard Template Library 2. Teil Praktische Beispiele Was dürft Ihr nicht

Mehr

Assoziative Container in C++ Christian Poulter

Assoziative Container in C++ Christian Poulter Assoziative Container in C++ Christian Poulter Seminar: Die Sprache C++ Mat-Nr.: 53 03 129 EMail: inf@poulter.de Christian Poulter Assoziative Container in C++ Seite 1/10 Inhalt 1. Einleitung: Container...

Mehr

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

Programmierkurs. Steffen Müthing. November 16, Interdisciplinary Center for Scientific Computing, Heidelberg University Programmierkurs Steffen Müthing Interdisciplinary Center for Scientific Computing, Heidelberg University November 16, 2018 Standardbibliothek Datenstrukturen Algorithmen Variablen und Referenzen Aufrufkonventionen

Mehr

12/18/12 // POST: values of a and b are interchanged void swap (int& a, int& b) { int c = a; a = b; b = c;

12/18/12 // POST: values of a and b are interchanged void swap (int& a, int& b) { int c = a; a = b; b = c; Generische Funktionalität Generisches Programmieren Template-Funktionen, Template- Klassen, generisches Sortieren, Fibonacci- und Ackermann-Zahlen zur Kompilierungszeit n Viele Funktionen braucht man für

Mehr

int main(){ int main(){ Das wollen wir doch genau verstehen! std::vector<int> v(10,0); // Vector of length 10

int main(){ int main(){ Das wollen wir doch genau verstehen! std::vector<int> v(10,0); // Vector of length 10 Wir erinnern uns #include #include 6. C++ vertieft (I) Kurzwiederholung: Vektoren, Zeiger und Iteratoren Bereichsbasiertes for, Schlüsselwort auto, eine Klasse für Vektoren, Subskript-Operator,

Mehr

Dynamische Datentypen

Dynamische Datentypen Dynamische Datentypen Tupel und Folgen o Wertebereich eines Structs / einer Klasse: T1 T2... Tk Werte sind k-tupel Tupel und Folgen o Wertebereich eines Structs / einer Klasse: T1 T2... Tk Werte sind k-tupel

Mehr

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

Computergrundkenntnisse und Programmieren, WS 07/08, Übung 11: Klassen der Standardbibliothek 2 Computergrundkenntnisse und Programmieren, WS 07/08, Übung 11: Klassen der Standardbibliothek 2 Neben vector ist list die zweite wichtige Containerklasse. Um unsere Kenntnisse von Containerklassen zu erweitern,

Mehr

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

5. Behälter und Iteratoren. Programmieren in C++ Überblick. 5.1 Einleitung. Programmieren in C++ Überblick: 5. Behälter und Iteratoren Programmieren in C++ Überblick 1. Einführung und Überblick 2. Klassen und Objekte: Datenkapselung 3. Erzeugung und Vernichtung von Objekten 4. Ad-hoc Polymorphismus 6. Templates und generische Programmierung

Mehr

Programmieren in C++ Überblick

Programmieren in C++ Überblick Programmieren in C++ Überblick 1. Einführung und Überblick 2. Klassen und Objekte: Datenkapselung 3. Erzeugung und Vernichtung von Objekten 4. Ad-hoc Polymorphismus 6. Templates und generische Programmierung

Mehr

Data Structures. Christian Schumacher, Info1 D-MAVT Linked Lists Queues Stacks Exercise

Data Structures. Christian Schumacher, Info1 D-MAVT Linked Lists Queues Stacks Exercise Data Structures Christian Schumacher, chschuma@inf.ethz.ch Info1 D-MAVT 2013 Linked Lists Queues Stacks Exercise Slides: http://graphics.ethz.ch/~chschuma/info1_13/ Motivation Want to represent lists of

Mehr

DAP2-Programmierpraktikum Einführung in C++ (Teil 2)

DAP2-Programmierpraktikum Einführung in C++ (Teil 2) DAP2-Programmierpraktikum Einführung in C++ (Teil 2) Carsten Gutwenger 18. April 2008 Lehrstuhl 11 Algorithm Engineering Fakultät für Informatik, TU Dortmund Überblick Dynamischer Speicher Klassen und

Mehr

Grundlagen der Informatik 11. Zeiger

Grundlagen der Informatik 11. Zeiger 11. Zeiger Motivation Zeiger und Adressen Zeiger und Funktionen Zeiger und Arrays Dynamische Objekte Grundlagen der Informatik (Alex Rempel) 1 Motivation Dynamische Speicherverwaltung Oft müssen große

Mehr

Objektorientierte Anwendungsentwicklung

Objektorientierte Anwendungsentwicklung Name, Vorname Matrikelnummer Klausur zur Vorlesung Objektorientierte Anwendungsentwicklung Krefeld, 16. März 2012 Hinweise: Schreiben Sie Ihren Namen und Ihre Matrikelnummer auf dieses Deckblatt. Die Aufgabenstellung

Mehr

Lambda-Funktionen. Lambda-Funktionen. Lambda-Funktionen sollen

Lambda-Funktionen. Lambda-Funktionen. Lambda-Funktionen sollen Lambda-Funktionen Lambda-Funktionen sind Funktionen ohne Namen. definieren ihre Funktionalität an Ort und Stelle. können wie Daten kopiert werden. können ihren Aufrufkontext speichern. Lambda-Funktionen

Mehr

Programmier-Befehle - Woche 8

Programmier-Befehle - Woche 8 Datentypen Array (mehrdim.) mehrdimensionale Massenvariable eines bestimmten Typs Definition: int my arr[2][3] = { {2, 1, 6}, {8, -1, 4} }; Zugriff: my arr[1][1] = 8 * my arr[0][2]; (Die Definition kann

Mehr

Repetitorium Programmieren I + II

Repetitorium Programmieren I + II Repetitorium Programmieren I + II Stephan Gimbel Johanna Mensik Michael Roth 24. September 2012 Agenda 1 Funktionen Aufbau und Anwendung Call by Value Call by Reference Überladen von Funktionen Default

Mehr

Programmier-Befehle - Woche 9

Programmier-Befehle - Woche 9 Zeiger und Iteratoren Zeiger (auf Array) Iterieren über ein Array Diese Befehle gelten zusätzlich zu denen unter Zeiger (generell) (siehe Summary 8), falls Zeiger auf einem Array verwendet werden. Wichtige

Mehr

Zusammenfassung. Mit bjam und ein paar Zeilen in einem Jamroot oder Jamfile lässt sich das Kompilieren und Linken einfach automatisieren

Zusammenfassung. Mit bjam und ein paar Zeilen in einem Jamroot oder Jamfile lässt sich das Kompilieren und Linken einfach automatisieren Zusammenfassung Deklaration einer Klasse im Header-File /.h-file Header-Files mit #pragma once vor double inclusion schützen möglichst Vorwärts-Deklarationen verwenden statt include-files einzubinden mindestens

Mehr

19. Vererbung und Polymorphie

19. Vererbung und Polymorphie 667 19. Vererbung und Polymorphie Ausdrucksbäume, Vererbung, Code-Wiederverwendung, virtuelle Funktionen, Polymorphie, Konzepte des objektorientierten Programmierens (Ausdrucks-)Bäume -(3-(4-5))*(3+4*5)/6

Mehr

Programmieren 2 C++ Überblick

Programmieren 2 C++ Überblick Programmieren 2 C++ Überblick 1. Einführung und Überblick 2. Klassen und Objekte: Datenkapselung 3. Erzeugung und Vernichtung von Objekten 4. Ad-hoc Polymorphismus 6. Templates und generische Programmierung

Mehr

9. Funktionen Teil II

9. Funktionen Teil II 9. Funktionen Teil II Prof. Dr. Markus Gross Informatik I für D-ITET (WS 03/04)!Inline Funktionen!Referenz-Variablen!Pass by Reference!Funktionsüberladung!Templates Copyright: M. Gross, ETHZ, 2003 2 Inline

Mehr

Kapitel 13. Definition von Klassen. OOP Thomas Klinker 1

Kapitel 13. Definition von Klassen. OOP Thomas Klinker 1 Kapitel 13 Definition von Klassen OOP Thomas Klinker 1 OOP Thomas Klinker 2 Datenabstraktion Der Mensch abstrahiert, um komplexe Sachverhalte darzustellen. Dinge und Vorgänge werden auf das wesentliche

Mehr

Einführung Sprachfeatures Hinweise, Tipps und Styleguide Informationen. Einführung in C. Patrick Schulz

Einführung Sprachfeatures Hinweise, Tipps und Styleguide Informationen. Einführung in C. Patrick Schulz Patrick Schulz patrick.schulz@paec-media.de 29.04.2013 1 Einführung Einführung 2 3 4 Quellen 1 Einführung Einführung 2 3 4 Quellen Hello World in Java Einführung 1 public class hello_ world 2 { 3 public

Mehr

Woche 6. Cedric Tompkin. April 11, Cedric Tompkin Woche 6 April 11, / 29

Woche 6. Cedric Tompkin. April 11, Cedric Tompkin Woche 6 April 11, / 29 Woche 6 Cedric Tompkin April 11, 2018 Cedric Tompkin Woche 6 April 11, 2018 1 / 29 Figure: Mehr Comics Cedric Tompkin Woche 6 April 11, 2018 2 / 29 Learning Objectives Dir kennst Return-by-value und Return-by-reference.

Mehr

Programmierkurs. Steffen Müthing. January 18, Interdisciplinary Center for Scientific Computing, Heidelberg University

Programmierkurs. Steffen Müthing. January 18, Interdisciplinary Center for Scientific Computing, Heidelberg University Programmierkurs Steffen Müthing Interdisciplinary Center for Scientific Computing, Heidelberg University January 18, 2019 Konzepte Standard-Konzepte für Code Reuse: Polymorphie/Vererbung Funktionalität

Mehr

Centrum für Informations- und Sprachverarbeitung SoSe 2018: Höhere Programmierung mit C++ Andreas Krieger. Musterlösung 9

Centrum für Informations- und Sprachverarbeitung SoSe 2018: Höhere Programmierung mit C++ Andreas Krieger. Musterlösung 9 Centrum für Informations- und Sprachverarbeitung SoSe 2018: Höhere Programmierung mit C++ Andreas Krieger Musterlösung 9 // Header - Datei CisWstring. hpp # ifndef CISWSTRING_ HPP_ # define CISWSTRING_

Mehr

Relationen-Algebra und Persistenz Teil I

Relationen-Algebra und Persistenz Teil I Relationen-Algebra und Persistenz Teil I Implementierungskonzepte und Anforderungen an Attributdatentypen LG Datenbanksysteme für neue Anwendungen Inhalt Flobs DbArrays Attributsdatentypen Folie 2 Bisher:

Mehr

Generative Programmierung

Generative Programmierung 1/100 Generative Programmierung Andreas Zeller Lehrstuhl Softwaretechnik Universität des Saarlandes, Saarbrücken Grundidee: Parametrisierung 2/100 Die Abstraktion ist ein weiteres Grundprinzip der Softwaretechnik.

Mehr

Informatik 1 ( ) D-MAVT F2010. Schleifen, Felder. Yves Brise Übungsstunde 5

Informatik 1 ( ) D-MAVT F2010. Schleifen, Felder. Yves Brise Übungsstunde 5 Informatik 1 (251-0832-00) D-MAVT F2010 Schleifen, Felder Nachbesprechung Blatt 3 Aufgabe 1 ASCII... A > a Vorsicht: Lösen Sie sich von intuitiven Schlussfolgerungen. A ist nicht grösser als a, denn in

Mehr

Hydroinformatik I: Referenzen und Zeiger

Hydroinformatik I: Referenzen und Zeiger Hydroinformatik I: Referenzen und Zeiger Prof. Dr.-Ing. habil. Olaf Kolditz 1 Helmholtz Centre for Environmental Research UFZ, Leipzig 2 Technische Universität Dresden TUD, Dresden Dresden, 06. Januar

Mehr

Relationen-Algebra und Persistenz Teil I

Relationen-Algebra und Persistenz Teil I Relationen-Algebra und Persistenz Teil I Implementierungskonzepte und Anforderungen an Attributdatentypen LG Datenbanksysteme für neue Anwendungen Inhalt FLOBs DBArrays Attributsdatentypen Folie 2 Bisher:

Mehr

Generative Programmierung

Generative Programmierung Generative Programmierung Andreas Zeller Lehrstuhl für Softwaretechnik Universität des Saarlandes, Saarbrücken 2005-01-12 Grundidee: Parametrisierung Die Abstraktion ist ein Grundprinzip der Softwaretechnik.

Mehr

18. Vererbung und Polymorphie

18. Vererbung und Polymorphie 590 18. Vererbung und Polymorphie Ausdrucksbäume, Vererbung, Code-Wiederverwendung, virtuelle Funktionen, Polymorphie, Konzepte des objektorientierten Programmierens (Ausdrucks-)Bäume 591 -(3-(4-5))*(3+4*5)/6

Mehr

18. Vererbung und Polymorphie

18. Vererbung und Polymorphie 617 18. Vererbung und Polymorphie Ausdrucksbäume, Vererbung, Code-Wiederverwendung, virtuelle Funktionen, Polymorphie, Konzepte des objektorientierten Programmierens (Ausdrucks-)Bäume -(3-(4-5))*(3+4*5)/6

Mehr

Schriftlicher Test (120 Minuten) VU Einführung ins Programmieren für TM. 23. Januar 2017

Schriftlicher Test (120 Minuten) VU Einführung ins Programmieren für TM. 23. Januar 2017 Familienname: Vorname: Matrikelnummer: Aufgabe 1 (3 Punkte): Aufgabe 2 (1 Punkt): Aufgabe 3 (2 Punkte): Aufgabe 4 (4 Punkte): Aufgabe 5 (2 Punkte): Aufgabe 6 (2 Punkte): Aufgabe 7 (4 Punkte): Aufgabe 8

Mehr

Programmierkurs. Steffen Müthing. January 25, Interdisciplinary Center for Scientific Computing, Heidelberg University

Programmierkurs. Steffen Müthing. January 25, Interdisciplinary Center for Scientific Computing, Heidelberg University Programmierkurs Steffen Müthing Interdisciplinary Center for Scientific Computing, Heidelberg University January 25, 2019 Inhalt Operator Overloading Motivation Syntax Unterstützung für I/O Funktoren Beispiel

Mehr

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

Wintersemester Maschinenbau und Kunststofftechnik. Informatik. Tobias Wolf  Seite 1 von 29 Kapitel 2 Einführung in C++ Seite 1 von 29 C++ Zeichensatz - Buchstaben: a bis z und A bis Z. - Ziffern: 0 bis 9 - Sonderzeichen: ; :,. # + - * / % _ \! < > & ^ ~ ( ) { } [ ]? Seite 2 von 29 Höhere Elemente

Mehr

Relationen-Algebra und Persistenz Teil I

Relationen-Algebra und Persistenz Teil I Relationen-Algebra und Persistenz Teil I Implementierungskonzepte und Anforderungen an Attributdatentypen LG Datenbanksysteme für neue Anwendungen Inhalt Flobs DbArrays Attributsdatentypen Folie 2 Bisher:

Mehr

Strukturen & Math. Strukturen und Vektoren. Allokieren eines Vektors. Zugriff auf Strukturen. Freigeben eines Vektors

Strukturen & Math. Strukturen und Vektoren. Allokieren eines Vektors. Zugriff auf Strukturen. Freigeben eines Vektors Strukturen & Math Strukturen für mathematische Objekte: allgemeine Vektoren Matrizen Strukturen und Vektoren 1 #ifndef _STRUCT_VECTOR_ 2 #define _STRUCT_VECTOR_ 3 4 #include 5 #include

Mehr

Strukturen & Math. Strukturen für mathematische Objekte: allgemeine Vektoren Matrizen

Strukturen & Math. Strukturen für mathematische Objekte: allgemeine Vektoren Matrizen Strukturen & Math Strukturen für mathematische Objekte: allgemeine Vektoren Matrizen 175 Strukturen und Vektoren 1 #ifndef _STRUCT_VECTOR_ 2 #define _STRUCT_VECTOR_ 3 4 #include 5 #include

Mehr

Probeklausur. Musterlösung

Probeklausur. Musterlösung Programmierkurs Probeklausur Dr. Steffen Müthing Abgabe 08. Februar 2019 IWR, Universität Heidelberg ipk-exercises:2018-ws-55-gc187ae0 Allgemeine Hinweise: Probeklausur Dieses Übungsblatt wird nicht bewertet.

Mehr

Einführung in die STL 226

Einführung in die STL 226 Einführung in die STL 226 Die Standard-Template-Library (STL) bietet eine Reihe von Template-Klassen für Container, eine allgemeine Schnittstelle für Iteratoren und eine Sammlung von Algorithmen an. Container-Klassen

Mehr

Informatik I (D-ITET)

Informatik I (D-ITET) //009 Informatik I (D-ITET) Übungsstunde 8, 6..009 simonmayer@student.ethz.ch ETH Zürich Besprechung/Vertiefung der Vorlesung [..009] ArrayStack Ausgezeichnet Einige haben s etwas kompliziert gemacht clear()

Mehr

Programmierkurs. Steffen Müthing. December 7, Interdisciplinary Center for Scientific Computing, Heidelberg University

Programmierkurs. Steffen Müthing. December 7, Interdisciplinary Center for Scientific Computing, Heidelberg University Programmierkurs Steffen Müthing Interdisciplinary Center for Scientific Computing, Heidelberg University December 7, 2018 Code Reuse Motivation Konzepte Vererbung (Idee) Templates Worum geht es? Datenstrukturen

Mehr

1. C++ vertieft (I) Was lernen wir heute? Wir erinnern uns... Nützliche Tools (1): auto (C++11)

1. C++ vertieft (I) Was lernen wir heute? Wir erinnern uns... Nützliche Tools (1): auto (C++11) Was lernen wir heute? 1. C++ vertieft (I) Kurzwiederholung: Vektoren, Zeiger und Iteratoren Bereichsbasiertes for, Schlüsselwort auto, eine Klasse für Vektoren, Indexoperator, Move-Konstruktion, Iterator.

Mehr

Grundlagen der Informatik

Grundlagen der Informatik Grundlagen der Informatik Klausur 1. August 2008 1. Dynamische Datenstrukturen und objektorientierte Programmierung (45 Punkte) Gegeben sei eine Datenstruktur mit folgendem Aufbau struct lelem { int w;

Mehr

Intensivkurs C++ Tag 2: Grundlagen++ Marc Tschentscher Institut für Neuroinformatik

Intensivkurs C++ Tag 2: Grundlagen++ Marc Tschentscher Institut für Neuroinformatik Intensivkurs C++ Tag 2: Grundlagen++ Marc Tschentscher Institut für Neuroinformatik www.ini.rub.de/rtcv 19.09.2017 Intensivkurs C++ 19.09.2017 Marc Tschentscher 1 Themen 1 Gültigkeitsbereiche und Namensräume

Mehr

Angewandte Kryptografie Praktikum 1

Angewandte Kryptografie Praktikum 1 Angewandte Kryptografie Praktikum 1 Thema: Affine Chiffre Wintersemester 2016/2017 Prof. Dr. Christoph Karg Hochschule Aalen Ziel dieses Praktikums ist die Implementierung der affinen Chiffre und einem

Mehr

Container usw. C++ Übung am 23. Juni 2016

Container usw. C++ Übung am 23. Juni 2016 Container usw. C++ Übung am 23. Juni 2016 Pairs std::pair std::pair emptypair; std::pair mypair("text",3.14f); std::pair copypair(mypair); std::pair

Mehr

Modernes C++ (C++11)

Modernes C++ (C++11) Modernes C++ (C++11) Dr. Klaus Ahrens C++ History 3 C++ History ~ 1980 Bjarne Stroustrup C with Classes Cfront (C++ --> C) 1983 erstmalige Nennung von C++ 1990 Annotated Reference Manual 1994 erster Entwurf

Mehr

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

C++ vs. Java. Hello world! Java C++ class HelloWorld { static public void main(string args) { System.out.println(Hello World! Hello world! Java class HelloWorld { static public void main(string args) { System.out.println("Hello World!"); } } C #include main() { printf("hello World!\n"); } C++ #include using

Mehr

initializer lists (nicht für Referenzen... unklar warum...)

initializer lists (nicht für Referenzen... unklar warum...) initializer lists (nicht für Referenzen... unklar warum...) 1 class Y{ y ; Y &ref (y) ; // ok Y &ref {y ; // Fehler: g++, MS VS C++11 47 preventing narrowing int x = 7.3; // Ouch! void f(int); f(7.3);

Mehr

7. Vererbung und Polymorphie

7. Vererbung und Polymorphie 210 7. Vererbung und Polymorphie Ausdrucksbäume, Vererbung, Code-Wiederverwendung, virtuelle Funktionen, Polymorphie, Konzepte des objektorientierten Programmierens (Ausdrucks-)Bäume -(3-(4-5))*(3+4*5)/6

Mehr

Übung HP Codes zu Aufgabe 11:

Übung HP Codes zu Aufgabe 11: Lexikon.cpp: /*Autor: Nicola Greth * Uebung 11 * Lexikon.cpp */ #include "LexikonArray.hpp" #include "LexikonVector.hpp" #include "LexikonList.hpp" #include "LexikonDeque.hpp" #include "LexikonSet.hpp"

Mehr