Standard Template Library
|
|
- Hans Geisler
- vor 5 Jahren
- Abrufe
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 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,
MehrMapra: 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
MehrEinfü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
MehrC++ 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
MehrInformatik 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
MehrDynamische 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
MehrInformatik - Ü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
MehrC++ 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
MehrProgrammier-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
MehrC++ 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)
MehrC++ 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
MehrHier 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
MehrMapra: 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
MehrC++ 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
Mehr19. 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
MehrInformatik - Ü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
MehrVisuelle 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,
MehrVerschlü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
MehrPolymorphismus 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
MehrSTL - 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
MehrProgrammierkurs 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 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
MehrC++ - 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.
MehrRepetitorium 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
MehrStandardbibliotheken. 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
MehrC++ 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
MehrPolymorphismus 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
MehrProgrammier-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:
MehrObjektorientierte 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
Mehr4 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
MehrMapra: 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
Mehrkurze 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
MehrSortierte 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,
MehrC++ 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
MehrC++ 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
MehrProgrammieren 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
MehrWo 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
MehrDatenkapselung: public / private
627 18. Klassen Klassen, Memberfunktionen, Konstruktoren, Stapel, verkettete Liste, dynamischer Speicher, Copy-Konstruktor, Zuweisungsoperator, Destruktor, Konzept Dynamischer Datentyp Datenkapselung:
MehrEinfü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
MehrWir 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
MehrInformatik 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
MehrAngewandte 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
MehrAls 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
MehrGrundlagen 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
MehrAdvanced 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
MehrDie 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
MehrAssoziative 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...
MehrProgrammierkurs. 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
Mehr12/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
Mehrint 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,
MehrDynamische 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
MehrComputergrundkenntnisse 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,
Mehr5. 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
MehrProgrammieren 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
MehrData 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
MehrDAP2-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
MehrGrundlagen 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
MehrObjektorientierte 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
MehrLambda-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
MehrProgrammier-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
MehrRepetitorium 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
MehrProgrammier-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
MehrZusammenfassung. 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
Mehr19. 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
MehrProgrammieren 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
Mehr9. 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
MehrKapitel 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
MehrEinfü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
MehrWoche 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.
MehrProgrammierkurs. 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
MehrCentrum 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_
MehrRelationen-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:
MehrGenerative 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.
MehrInformatik 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
MehrHydroinformatik 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
MehrRelationen-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:
MehrGenerative 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.
Mehr18. 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
Mehr18. 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
MehrSchriftlicher 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
MehrProgrammierkurs. 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
MehrWintersemester 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
MehrRelationen-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:
MehrStrukturen & 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
MehrStrukturen & 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
MehrProbeklausur. 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.
MehrEinfü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
MehrInformatik 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()
MehrProgrammierkurs. 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
Mehr1. 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.
MehrGrundlagen 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;
MehrIntensivkurs 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
MehrAngewandte 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
MehrContainer 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
MehrModernes 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
MehrC++ 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
Mehrinitializer 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);
Mehr7. 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:
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