C++ Prof. Peter Sommerlad Fredy Ulmer

Größe: px
Ab Seite anzeigen:

Download "C++ Prof. Peter Sommerlad Fredy Ulmer"

Transkript

1 Programmieren 3 C++ Standardbibliothek Einführung Prof. Peter Sommerlad Fredy Ulmer

2 Was Sie diese Woche erwartet: Eine weitere Warnung! std::vector<> Iteratoren Algorithmen std::set<> std::map<> Sie kennen schon: o std::string o std::cin o std::cout Prog3: P. Sommerlad, F. Ulmer 2

3 C++ ist nicht Java noch eine Warnung C++ wie auch die STL sind für Profis gemacht wir hoffen, Sie dazu zu machen! C++ HSR Programmierer sind für die korrekte Nutzung der Klassen und Algorithmen verantwortlich manchmal komische Compilerfehlermeldungen manchmal "eigenartiges" Verhalten der Programme manchmal definiert undefiniertes Verhalten i.d.r. werden keine Exceptions geworfen o fragen Sie ihren Betreuer! Prog3: P. Sommerlad, F. Ulmer 3

4 C++ ist nicht Java C++ Wahrheitswerte In C++ gibt es bool (nicht wie in Java boolean) bool ist kompatibel mit int o ACHTUNG: manchmal verwirrend, wenn bool ungewollt bei Rechenoperationen mitmacht Wahrheit ist grosszügig definiert: o 0 ist falsch o alles andere ist wahr, das gilt auch für nahezu beliebige Typen man kann also fast alles als Bedingung verwenden Prog3: P. Sommerlad, F. Ulmer 4

5 std::vector<> Der Standardcontainer für die Sammlung gleichartiger Elemente Es gibt bei boost ein "gleichartiges" Element für heterogene Sammlungen ( boost::any ) Man kann hinten anfügen push_back() o Grösse wird automatisch angepasst! Zugriff über Index ist möglich v[5] Initialisierung über Iteratoren möglich o kommt noch Prog3: P. Sommerlad, F. Ulmer 5

6 std::vector<> Kurze Einführung Definition eines vectors (Headerfile <vector>) vector<int> V(10); Länge eines vectors: cout << V.size() << endl; Zugriff auf ein Element: V[5] = 15; cout << V[7] << endl; Datentyp der Elemente im vector Vorsicht: die Indizes gehen von 0 bis (max-1), falsche Indizes werden nicht überprüft! o Es gibt keine Exceptions bei Zugriff ausserhalb! Prog3: P. Sommerlad, F. Ulmer 6

7 std::vector Nutzung Element an vector anhängen: V.push_back(99); Letztes Element löschen: V.pop_back(); Alle Elemente im vector löschen V.clear(); Anzahl der Element ermitteln cout << V.size(); Prog3: P. Sommerlad, F. Ulmer 7

8 Idiom: Einlesen in Schleife Um einen vector von der Standardeingabe zu füllen, benötigt man im einfachen Fall eine Schleife. o Ein Stream Objekt (cin) kann auch als Schleifenbedingung dienen! (DEMO) #include <iostream> #include <vector> using namespace std; int main(){ vector<int> v; int input; while(cin >> input) { v.push_back(input); } } #include <iostream> #include <vector> using namespace std; int main(){ vector<int> v; int input; while(cin) { cin >> input; v.push_back(input); } } Prog3: P. Sommerlad, F. Ulmer 8

9 Iteratoren C++ vs. Java Java kennt 2 Arten von Iteratoren: package java.util; public interface Iterator<E> { boolean hasnext(); E next(); void remove(); } package java.util; public interface Enumeration<E> { boolean hasmoreelements(); E nextelement(); } C++ definiert Iteratoren über definierte Operatoren: (für Iterator it) o *it Zugriff auf das aktuelle Element auf das it verweist o ++it weiter zum nächsten Element o it!= v.end() Ende-Erkennung über Vergleich zweier Iteratoren Prog3: P. Sommerlad, F. Ulmer 9

10 Iteratoren C++ vs. Java Wie bekommt man nun einen Iterator? public interface Iterable<T> { Iterator<T> iterator(); } Standardcontainer definieren ::iterator Typ Factory-Methoden o begin() Anfang des Containers o end() Ende des Container (hinter dem Ende!) vector<int>::iterator it = v.begin(); while(it!= v.end()){ cout << *it << endl; ++it; } for ( vector<int>::iterator it = v.begin(); (it!= v.end()); ++it){ cout << *it << endl; } Prog3: P. Sommerlad, F. Ulmer 10

11 Idiom: Ausgeben in Schleife Um den eingelesenen vector<int> auszugeben existieren verschiedene Möglichkeiten: o klassisch: vector<int>::iterator it = v.begin(); while(it!= v.end()){ cout << *it << endl; ++it; } o modern: for ( vector<int>::iterator it = v.begin(); it!= v.end(); ++it){ cout << *it << endl; } for_each(v.begin(),v.end(), cout << _1 << "\n"); copy(v.begin(),v.end(), ostream_iterator<int>(cout,"\n")); Prog3: P. Sommerlad, F. Ulmer 11

12 vector<> Iteratoren vector<>::iterator o Typ des Iterators begin(), end() o Iteratoren zur Benutzung vector<int>, size() == 6 begin() end() Prog3: P. Sommerlad, F. Ulmer 12

13 vector<> Iteratoren vector<int> v = vector<int> iterator it; Was erhalten Sie bei folgenden Anweisungen? raten Sie ruhig und diskutieren Sie mit ihrem Nachbarn o *v.begin begin()? o it = v.begin(); ++it; ++it; *it? o it = v.begin(); it = it +3; *it? o it = v.begin(); it[3]? o it = v.begin(); *++it = 7? 7 Prog3: P. Sommerlad, F. Ulmer 13

14 C++ Iteratoren Diskussion In modernem C++ werden Iteratoren selten direkt zum Iterieren benutzt, sondern als Parameter für fertige Algorithmen, die das Iterieren vornehmen (copy, find, accumulate) Die STL Algorithmen verwenden meistens ein Paar von Iteratoren, die Anfang und Ende eines Bereichs bedeuten. o das Ende zeigt immer "hinter" den zu iterierenden Bereich Der mittels end() ermittelte Iterator kann nur zum Vergleichen verwendet werden, da er hinter das Ende eines Containers verweist. Prog3: P. Sommerlad, F. Ulmer 14

15 Reverse Iteratoren std::vector<> und std::string definieren auch Iteratoren, die "von hinten" iterieren: o rbegin() o rend() o std::vector<>::reverse_iterator -> Typ Zum durchlaufen benutzt man auch ++! for( vector<int>::reverse_iteratorreverse_iterator it = v.rbegin() rbegin(); it!= v.rend() rend(); ++it){ cout << *it << endl; } Prog3: P. Sommerlad, F. Ulmer 15

16 Spezialiteratoren für I/O ostream_iterator Die Standardbibliothek definiert spezielle Iteratoren für die Nutzung der Algorithmen für I/O-Streams (cout) std::ostream_iterator<typ> o dient zur Ausgabe von Elementen des Typs vector<int> v; // abfüllen... // zeilenweise ausgeben: copy(v.begin(),v.end(), ostream_iterator<int>(cout,"\n")); o Konstruktorparameter: ostream& -> wohin geht die Ausgabe (cout) Trenner -> optionaler Trenner als String Konstante "\n" o Templateparameter Typ muss immer angegeben werden! o Iterator-Objekt wird bei Algorithmen per Wert angegeben Prog3: P. Sommerlad, F. Ulmer 16

17 std::string und Iteratoren Auch std::string definiert Iteratoren o damit können Algorithmen, die auf Iteratoren aufbauen auch auf Strings angewendet werden string s("hello world"); sort(s.begin(),s.end()); cout << s << endl; //-> " Hdellloorw" Prog3: P. Sommerlad, F. Ulmer 17

18 Spezialiteratoren für I/O istream_iterator std::istream_iterator<typ> o dient zur Einlesen von Elementen des Typs Wie das Ende markieren? o Spezialobjekt ohne Stream als EOF-Marker o istream_iterator<typ> eof; istream_iterator<int> eof; vector<int> v(istream_iterator<int>(cin),eof); // Vector von Eingabe abfüllen... o Konstruktorparameter: istream& -> woher kommt die Eingabe ACHTUNG: "whitespace" (Leerzeichen, Zeilentrenner, Tabs) wird überlesen o >> Operator wird intern genutzt o evtl. für istream_iterator<char> problematisch Prog3: P. Sommerlad, F. Ulmer 18

19 Spezialiteratoren für I/O istreambuf_iterator std::istreambuf_iterator<typ> o dient zur Einlesen von Elementen des Typs normalerweise ist das char o Endemarker wie bei istreambuf_iterator o Konstruktorparameter: istream& -> woher kommt die Eingabe liest auch whitespace ein istreambuf_iterator<char> eof; cout << distance(istreambuf_iterator<char>(cin),eof)<< endl; // wieviele Zeichen auf der Standardeingabe? Prog3: P. Sommerlad, F. Ulmer 19

20 Erste nützliche Algorithmen copy Kopiert einen Bereich o schon gesehen, um vector auszugeben find Elemente suchen count Elemente zählen accumulate Elemente summieren Iteratoren-Funktion: distance Abstand zwischen zwei Iteratoren Prog3: P. Sommerlad, F. Ulmer 20

21 distance() Zählt die Elemente, die zwischen zwei Iteratoren liegen. distance(v.begin(),v.end()) == v.size() ist effizient Prog3: P. Sommerlad, F. Ulmer 21

22 Suchen mit find() Der Algorithmus find sucht über Iteratoren nach einem Wert. liefert einen Iterator als Ergebnis: o auf das gefundene Element, oder o das Ende des Bereichs, falls nicht gefunden istream_iterator<int> eof; vector<int> v(istream_iterator<int>(cin),eof); Bereichsende! if (find(v.begin(),v.end(),42)!= v.end()) cout << "I found the answer 42" <<endl; else cout << "no answer found" << endl; Prog3: P. Sommerlad, F. Ulmer 22

23 Suchen mit find() vector<int> mit folgender Belegung: begin() find(v.begin(),v.end(),42) end() find(v.begin(),v.end(),43) Prog3: P. Sommerlad, F. Ulmer 23

24 Zählen mit count() int count(inputiterator first, InputIterator last, value) zählt, wie oft value im Bereich [first,last) vorkommt. braucht #include <algorithm> istream_iterator<int> eof; vector<int> v(istream_iterator<int>(cin),eof); cout << "Anzahl der Nullen: " << count(v.begin(),v.end(),0) << endl; Prog3: P. Sommerlad, F. Ulmer 24

25 Summieren mit accumulate() T accumulate(inputiterator first, InputIterator last, T startvalue) summiert Werte aus Iteratoren Bereich auf. braucht #include <numeric> istream_iterator<int> eof; vector<int> v(istream_iterator<int>(cin),eof); cout << "Summe der Eingaben :" << accumulate(v.begin(),v.end(),0) << endl; Prog3: P. Sommerlad, F. Ulmer 25

26 vector<> mit boost::assign initialisieren ausser mit iteratoren ist es aufwändig einen vector zu initialisieren: using namespace std; vector<int> v; v.push_back(31); v.push_back(41); v.push_back(59); v.push_back(26); // mühsam... es sei denn, man nutzt <boost/assign.hpp> using namespace boost::assign; v += 31,41,59,26; ACHTUNG: in Eclipse für das Projekt den Include Pfad um boost ergänzen! o z.b. c:/cygwin/usr/include/boost-1_33_1/ Prog3: P. Sommerlad, F. Ulmer 26

27 Programmieren 3 C++ Standardbibliothek STL (2) Prof. Peter Sommerlad Fredy Ulmer

28 STL Überblick Container vector deque list set multiset map multimap stack queue priority_queue Arrays Type a[n] Pseudo- Container string istream (-buf) ostream (-buf) bieten Zugriff Iterator-Kategorien InputIterator OutputIterator ForwardIterator BidirectionalIterator RandomAccessIterator Pointer Type *p wirken auf I/O stream Iteratoren istream_iterator istreambuf_iterator ostream_iterator ostreambuf_iterator helfen nutzen Funktoren Prädikate unary_function binary_function ptr_fun, mem_fun, mem_fun_ref Algorithmen-Kategorien non-modifying comparison searching binary search modifying sequence uninitialized sequence sorting merging set operations heap operations permutations miscellaneous numerics Iteratorfunktionen Prog3: P. Sommerlad, F. Ulmer 28

29 std::set<t> Neben vector<> und string gibt es auch eine Standardklasse für Mengen von Elementen. Jedes Element kann nur einmal vorkommen. std::set ist automatisch sortiert. Neben den Standard-Container Methoden definiert std::set, solche, die mit Element- Werten arbeiten, statt mit Iteratoren: o s.find(element e) o s.insert(element e) kein push_back(e)! o s.erase(element e) Prog3: P. Sommerlad, F. Ulmer 29

30 Set / Multiset set erlaubt keine Duplikate, multiset schon Für den Element Typ muss der < Operator definiert sein, wegen Sortierung o für int, string, etc. automatisch der Fall o wir lernen später, wie man das für eigene Typen macht, bzw. Sortierreihenfolge ändert. Set: Multiset: Prog3: P. Sommerlad, F. Ulmer 30

31 Demo std::set<int> Einlesen einer Menge von Zahlen sortierte Ausgabe Prüfen ob eine Zahl vorhanden ist o direkt im set möglich! Prog3: P. Sommerlad, F. Ulmer 31

32 std::map<k,v> Definiert eine Nachschlagetabelle für sog. keyvalue Paare. o analog Java's java.util.map, aber sortiert. Jeder Key darf nur einmal vorkommen. o ausser bei std::multimap<k,v> Die map ist nach Keys sortiert. Es gibt einen effizizienten Suchzugriff auf Values, wenn man nach dem key sucht. Map: 1 z Multimap: 2 x 4 y 3 y 5 y 6 z 1 z 1 x 3 y 2 y 3 y 3 z Prog3: P. Sommerlad, F. Ulmer 32

33 Diskussion std::map Maps sind eine sehr wichtige Datenstruktur, auch bekannt als "assoziatives Array" oder Dictionary alle Skripting Sprachen verwenden extensiv solche Maps o Perl, Ruby, awk,... Die Möglichkeit unter einem "Namen" einen Wert zu hinterlegen ist auch in C++ sehr wertvoll Der Zugriff über [key] macht Programme i.d.r. gut lesbar Values können geändert werden, Keys nicht o nur über neu-eintragen und löschen des alten Keys Prog3: P. Sommerlad, F. Ulmer 33

34 Iterator für std::map std::pair<t1,t2> Da jedes Element einer map ein Paar aus Key und Value ist, gibt es dafür eine Standard Datenstruktur: o std::pair<key,value> map::iterator verweist nicht auf key, bzw. value der Einträge, sondern auf diese Paare o Das macht die Verwendung von map in manchen Algorithmen "unhandlicher" als set oder vector. Zugriff: o map<string,int>::iterator it=m.begin(); o Key über: (*it).first bzw. it->first o Value über: (*it).second bzw. it->second Prog3: P. Sommerlad, F. Ulmer 34

35 Demo map map<string, double> Preisliste o Preise einlesen o Liste ausgeben o Preise ergänzen und ändern Prog3: P. Sommerlad, F. Ulmer 35

36 boost::assign für maps Maps initialisieren ist auch unhandlich: using namespace std; map<string,int> m; m["frodo"]=21; m["bilbo"]=123; m["gandalf"]=502; m["harry Potter"]= -42; // mühsam... auch hier hilft boost::assign: using namespace boost::assign; insert(m)("frodo",21)("bilbo",123) ("Gandalf",502)("Harry Potter",-42); Prog3: P. Sommerlad, F. Ulmer 36

37 STL Theorie Schnupperinfo schon einmal zum nachschlagen...

38 Die Standard Template Library STL Die STL besteht im Wesentlichen aus drei Teilen: Container: Eine Menge von Objekten eines bestimmten Typs verwalten. Iteratoren: Über eine Menge von Objekten wandern (iterieren). Algorithmen: Mengen in irgendeiner Form bearbeiten. (sortieren, auffinden, löschen, modifizieren...) Prog3: P. Sommerlad, F. Ulmer 38

39 Zusammenspiel Iteratoren werden insbesondere dazu benutzt um Containerelemente anzusprechen. Algorithmen arbeiten auf Containern und verwenden dabei Iteratoren. Iteratoren als Bindeglied zwischen Containern und Algorithmen. Container vector<> set<> map<> string Iteratoren begin() end() istream_iterator ostream_iterator Algorithmen find() copy() count() accumulate() Prog3: P. Sommerlad, F. Ulmer 39

40 Iteratoren Konzepte Praktisch alle Algorithmen der STL setzen auf Iteratoren auf Iteratoren legen z.b. folgende Positionen fest: o Anfang und Ende o Einfüge und Löschposition o Position eines Suchergebnisses Ein Range (Bereich) ist ein Paar zusammengehöriger Iteratoren o z.b. [begin(), end()) bilden einen Range. o Das Ende des Range gehört nicht mehr zum Range, der Anfang sehr wohl ("halboffen") Zugriff *end() ist undefiniert! Prog3: P. Sommerlad, F. Ulmer 40

41 Iteratoren: Verhalten Folgende fundamentale Operationen sind für alle Iteratoren definiert T& iterator::operator*() operator*() bezeichnet * bei *it o Liefert das Element, an dessen Position sich der Iterator befindet. Sofern das Element Komponenten hat, kann mit dem Operator -> darauf zugegriffen werden iterator::operator++() o Setzt den Iterator ein Element weiter. immer die Prä- Inkrement Variante verwenden (++pos). iterator::operator==() iterator::operator!=() o "zeigen" die Iteratoren auf das gleiche Element? oder nicht? Prog3: P. Sommerlad, F. Ulmer 41

42 Iterator Kategorien Grund für Kategorien Container unterstützen unterschiedliche Iterator-Mächtigkeit o z.b. sequentieller bzw. wahlfreier Zugriff Algorithmen benötigen unterschiedlich "starke" Iteratoren. o Algorithmen sind i.d.r so definiert, die "schwächste" Annahme zu machen. Bei "stärkeren" Iteratortypen als Parameter werden automatisch optimierte Implementierungen der Algorithmen verwendet "Magie" durch Template Specialization Prog3: P. Sommerlad, F. Ulmer 42

43 Iterator Kategorien (1) Input-Iterator o einmaliger Durchlauf möglich/gefordert o lesender Zugriff via operator*() nur einmal möglich, danach Element "verbraucht" o Modell: istream_iterator<t> Output-Iterator o einmaliger Durchlauf möglich/gefordert o nur schreibender Zugriff via operator*() nur einmal möglich! *iter=value; o Modell: ostream_iterator<t> Prog3: P. Sommerlad, F. Ulmer 43

44 Iterator Kategorien (2) Forward-Iterator o mehrmaliger Durchlauf möglich/gefordert o Zugriff via operator*() beliebig oft nur eingeschränkt, falls const_iterator o "normale" Iteration, kompatibel zu Input- und Output- Iterator Bidirectional-Iterator o zusätzlich ist -- operator--() definiert o vorwärts und rückwärts möglich Modell: list<t>::iterator Random Access-Iterator o zusätzlich ist operator[]() definiert o Integer-Addition ist möglich (statt advance() Funktion) o Subtraktion zusammengehörender Iteratoren liefert Distanz o Modell: vector<t>::iterator Prog3: P. Sommerlad, F. Ulmer 44

45 Einfügen mit Insertion Iteratoren Insertion Iteratoren sind spezielle Output-Iteratoren, die es erlauben in Container etwas einzufügen. o *iter = value; // ist definiert und fügt value ein o ++iter; // ist definiert aber ein "no-op" back_inserter(container &) o nutzt push_back Methode des Containers um Elemente einzufügen o funktioniert für string, vector, deque, list oder einen eigenen, der push_back(const T&) definiert front_inserter(container &) o analog back_inserter, aber mit push_front Aufruf o funktioniert für deque, list oder eigene Container mit push_front(const T&) inserter(container&,iterator pos) o fügt Elemente an der Position pos ein. o nutzt Container Methode insert(iterator,const T&) des Containers Prog3: P. Sommerlad, F. Ulmer 45

46 Anwendung Insertion Iteratoren #include <iostream> #include <vector> ints in vector #include <iterator> einlesen und using namespace std; wieder ausgeben int main() { vector<int> v; typedef istream_iterator<int> input; copy(input(cin),input(),back_inserter(v)); copy(v.begin(),v.end(),ostream_iterator<int>(cout,"\n")); } #include <iostream> #include <set> ints in set einlesen und #include <iterator> sortiert ausgeben using namespace std; int main() { set<int> s; typedef istream_iterator<int> input; copy(input(cin),input(),inserter(s,s.begin())); copy(s.begin(),s.end(),ostream_iterator<int>(cout,"\n")); } Prog3: P. Sommerlad, F. Ulmer 46

47 Container Methoden mit Iteratoren Container(InputIterator first, InputIterator last) o Erzeuge Container mit Elementen aus Range [first,last) iterator begin(), iterator end() o (const_)iterator auf erstes/hinter letztes Element erase(iterator p) o Entferne Element p aus Container erase(iterator first, iterator last) o Entferne Elemente des Range [first,last) aus dem Container reverse_iterator rbegin(), reverse_iterator rend() o liefere die Reverse-Iteratoren Prog3: P. Sommerlad, F. Ulmer 47

48 Container Methoden mit Iteratoren (II) insert(iterator p,const T& value) o füge value an Position p ein insert(iterator p,size_type n, const T& value) o füge n Elemente mit Wert value an Position p ein insert(iterator p, InputIterator first, InputIterator last) o füge Elemente aus dem Range [first,last) an Position p ein Prog3: P. Sommerlad, F. Ulmer 48

49 Methoden mit Iteratoren für Assoziative C. insert(inputiterator first, InputIterator last) o füge Elemente aus Range ein, nur (multi-) set und map iterator find(const T& k) o Suche Element äquivalent zu k und liefere Iterator auf dieses oder end(), falls k nicht gefunden iterator lower_bound(const T& k) o Suche Element k und liefere Iterator auf k oder die Stelle wo k kommen müsste iterator upper_bound(const T& k) o Suche erstes Element grösser als k und liefere den Iterator dafür Prog3: P. Sommerlad, F. Ulmer 49

50 Container Methoden Bevorzuge Range-Operationen statt Schleife mit einzelnen Operationen o Konstruktor o erase() o insert() #include <iostream> #include <set> ints in set einlesen und #include <iterator> sortiert ausgeben using namespace std; int main() { typedef istream_iterator<int> input; input eof; // trick to force the following as data! set<int> s(input(cin),eof); copy(s.begin(),s.end(),ostream_iterator<int>(cout,"\n")); } Prog3: P. Sommerlad, F. Ulmer 50

51 Operationen für Container X container; X container1(container2) container.~x() container.size() container.maxsize() bool container.empty() container1 = container2 container1.swap(container2) swap(container1, container2) container1 == container2 container1 < container2 Standardkonstruktor, erzeugt leeren Container Copy-Konstruktor Destruktor, löscht alle Elemente und gibt den Speicherplatz frei Aktuelle Anzahl von Elementen Maximal mögliche Anzahl von Elementen true, falls Container leer Zuweisungsoperator, alle Elemente kopieren Vertauscht die Container, als Methode und als globale Funktion Vergleichsoperatoren, entsprechend auch!=, >, <= und >= X steht für den Datentyp des Containers, z.b. vector<int> Prog3: P. Sommerlad, F. Ulmer 51

52 Operationen für Container mit Iteratoren X container1(anf, end) container.begin() container.end() container.rbegin() container.rend() container.insert(pos,elem) container.erase(pos) container.erase(anf,end) container.clear() Erzeugt Container und initialisiert ihn mit Elementen aus Iteratorenbereich Liefert Iterator auf das erste Element Liefert Iterator für die Position hinter(!) dem letzten Element Liefert Reverse-Iterator auf das letzte Element Liefert Reverse-Iterator für die Position vor(!) dem ersten Element Fügt eine Kopie von elem an Iteratorposition pos ein Löscht Element an Iteratorposition Löscht alle Elemente des Bereichs Löscht alle Elemente des Containers Prog3: P. Sommerlad, F. Ulmer 52

53 Container Datentypen Container::value_type Container::size_type Container::reference Container::const_reference Container::iterator Container::const_iterator Datentyp eines Container Elementes Ganzahliger, vorzeichenloser Wert für Grössenangaben Referenztyp auf Container-Element dito, nur lesend verwendbar Iteratortyp dito, nur lesend verwendbar Container steht für den Datentyp des Containers, zbsp. vector<int> Prog3: P. Sommerlad, F. Ulmer 53

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

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

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

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

Einführung in die Programmierung mit C++

Einführung in die Programmierung mit C++ 1 Seite 1 Einführung in die Programmierung mit C++ Teil IV - Weiterführende Themen 13. Klassenbibliotheken Klassenbibliotheken Seite 2 Sammlung von Algorithmen und Klassen in Klassenbibliotheken: Konzept:

Mehr

C-Arrays vs. C++-Container

C-Arrays vs. C++-Container C-Arrays vs. C++-Container In C verwendet man (mangels Alternativen) sehr häufig das C-Array (= Feld): im Speicher hintereinander abgelegte Elemente vom gleichen Typ. Arrays haben einen Basistyp (Typ des

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

C++ STL. Iteratoren. Ralf Schuchardt

C++ STL. Iteratoren. Ralf Schuchardt C++ STL Iteratoren Ralf Schuchardt 1 Übersicht Konzete const_iterator reverse_iterator Iterator-Traits Iterator-Adater istreambuf_itererator 2 Iterator::Konzete Trivial-Iterator *it, it->, it1 == it2 Inut-Iterator

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

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

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-Arrays vs. C++-Container

C-Arrays vs. C++-Container C-Arrays vs. C++-Container In C verwendet man (mangels Alternativen) sehr häufig das C-Array (= Feld): im Speicher hintereinander abgelegte Elemente vom gleichen Typ. Arrays haben einen Basistyp (Typ des

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

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

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

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

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

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

Einführung in die Nutzung der C++ - Standard - Bibliothek

Einführung in die Nutzung der C++ - Standard - Bibliothek Einführung in die Nutzung der C++ - Standard - Bibliothek Literatur: (Amme) - Ammeraal, L.: STL for C++-Programmers; Chichester: Wiley, 1997 (Brey) - Breymann, U.: Die C++ Standard Template Library; München:

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

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

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

Algorithmen und Datenstrukturen

Algorithmen und Datenstrukturen Algorithmen und Datenstrukturen Dynamische Datenobjekte Pointer/Zeiger, Verkettete Liste Eigene Typdefinitionen 1 Zeigeroperatoren & und * Ein Zeiger ist die Speicheradresse irgendeines Objektes. Eine

Mehr

JAVA KURS COLLECTION

JAVA KURS COLLECTION JAVA KURS COLLECTION COLLECTIONS Christa Schneider 2 COLLECTION Enthält als Basis-Interface grundlegende Methoden zur Arbeit mit Collections Methode int size() boolean isempty() boolean contains (Object)

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

19. Dynamische Datenstrukturen II

19. Dynamische Datenstrukturen II Anderes Speicherlayout: Verkettete Liste 19. Dynamische Datenstrukturen II Kein zusammenhängender Speicherbereich und kein wahlfreier Zugriff Jedes Element zeigt auf seinen Nachfolger Einfügen und Löschen

Mehr

19. Dynamische Datenstrukturen II

19. Dynamische Datenstrukturen II Anderes Speicherlayout: Verkettete Liste 19. Dynamische Datenstrukturen II Verkettete Listen, Vektoren als verkettete Listen Kein zusammenhängender Speicherbereich und kein wahlfreier Zugriff Jedes Element

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

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

Einführung in die Informatik: Programmierung und Software-Entwicklung, WS 16/17. Kapitel 13. Listen. Listen 1

Einführung in die Informatik: Programmierung und Software-Entwicklung, WS 16/17. Kapitel 13. Listen. Listen 1 Kapitel 13 Listen Listen 1 Ziele Implementierungen für Listen kennenlernen Einfach verkettete und doppelt verkettete Listen verstehen Listen-Implementierungen in der Java-Bibliothek kennenlernen Durch

Mehr

Einführung in die Informatik: Programmierung und Software-Entwicklung, WS 15/16. Kapitel 12. Listen. Listen 1

Einführung in die Informatik: Programmierung und Software-Entwicklung, WS 15/16. Kapitel 12. Listen. Listen 1 Kapitel 12 Listen Listen 1 Ziele Implementierungen für Listen kennenlernen Einfach verkettete und doppelt verkettete Listen verstehen Listen-Implementierungen in der Java-Bibliothek kennenlernen Durch

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 Informatik: Programmierung und Software-Entwicklung, WS 11/12 1. Kapitel 11. Listen. Listen

Einführung in die Informatik: Programmierung und Software-Entwicklung, WS 11/12 1. Kapitel 11. Listen. Listen Einführung in die Informatik: Programmierung und Software-Entwicklung, WS 11/12 1 Kapitel 11 Einführung in die Informatik: Programmierung und Software-Entwicklung, WS 11/12 2 Ziele Implementierungen für

Mehr

Einführung in die Programmierung Wintersemester 2018/19

Einführung in die Programmierung Wintersemester 2018/19 Einführung in die Programmierung Wintersemester 2018/19 Prof. Dr. Günter Rudolph Lehrstuhl für Algorithm Engineering Fakultät für Informatik TU Dortmund : STL Inhalt Überblick über die Standard Template

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

C++ Standardbibliothek

C++ Standardbibliothek C++ Standardbibliothek Zu jedem Compiler gibt es eine Bibliothek mit nützlichen Klassen und Routinen. Die C++ Standardbibliothek (standard library) stellt ein erweiterbares Rahmenwerk mit folgenden Komponenten

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

19. Dynamische Datenstrukturen II. Verkettete Listen, Vektoren als verkettete Listen

19. Dynamische Datenstrukturen II. Verkettete Listen, Vektoren als verkettete Listen 636 19. Dynamische Datenstrukturen II Verkettete Listen, Vektoren als verkettete Listen Anderes Speicherlayout: Verkettete Liste 638 Kein zusammenhängender Speicherbereich und kein wahlfreier Zugriff 638

Mehr

Standard Template Library

Standard Template Library Standard Template Library Ralph Thesen Institut für Numerische Simulation Rheinische Friedrich-Wilhelms-Universität Bonn Seminar: Technische Numerik Dezember 2009 Überblick 1 Einleitung 2 Templates 3 STL

Mehr

13 Reguläre Ausdrücke

13 Reguläre Ausdrücke 13 Reguläre Ausdrücke 13.1 Übungsaufgabe 13.1.1 Aufgabe 1 Schreiben Sie ein C++ Programm, das eine txt-datei (UTF8 kodiert) öffnet und mit wcin alle Wörter einliest, Punktuationszeichen am Anfang und Ende

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

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

Wer C sagt, muss auch PlusPlus sagen! Teil 2 Standard Template Library, STL. Ergänzungsmanuskript für Fortgeschrittenen-Kurs C++ Programmierung

Wer C sagt, muss auch PlusPlus sagen! Teil 2 Standard Template Library, STL. Ergänzungsmanuskript für Fortgeschrittenen-Kurs C++ Programmierung Wer C sagt, muss auch PlusPlus sagen! Teil 2 Standard Template Library, STL Ergänzungsmanuskript für Fortgeschrittenen-Kurs C++ Programmierung 2 8 DIE STL 3 8.1 Aufbau der STL 3 8.1.1 Container (container)

Mehr

Programmieren in C/C++ und MATLAB

Programmieren in C/C++ und MATLAB Programmieren in C/C++ und MATLAB Sven Willert Sabine Schmidt Christian-Albrechts-Universität zu Kiel CAU 5-1 Übung Schreiben Sie ein Programm, das die Zahl π durch π = 4 4 4 4 4 4 + + +... 3 5 7 9 11

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

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

Numerische Methoden und Algorithmen in der Physik

Numerische Methoden und Algorithmen in der Physik Numerische Methoden und Algorithmen in der Physik Hartmut Stadie, Christian Autermann 06.11.2008 Numerische Methoden und Algorithmen in der Physik Christian Autermann 1/ 40 Einführung Datenfelder Sortieralgorithmen

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

Problem: Was ist, wenn der Stapel voll ist? Idee: Erzeuge dynamisch ein grösseres Array und kopiere um. Dynamische Anpassung der Größe

Problem: Was ist, wenn der Stapel voll ist? Idee: Erzeuge dynamisch ein grösseres Array und kopiere um. Dynamische Anpassung der Größe Maximale Größe?! Problem: Was ist, wenn der Stapel voll ist? Idee: Erzeuge dynamisch ein grösseres Array und kopiere um Dynamische Anpassung der Größe Praktische Informatik I, HWS 2009, Kapitel 10 Seite

Mehr

STL-Container und Laufzeit

STL-Container und Laufzeit STL-Container und Laufzeit Eine Übersicht Höhere Programmierung / C++ Yannick Kaiser, LMU 1 C++11 Array konstanter Länge, die bei der Initalisierung angegeben werden muss STL-Kapselung für klassische

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

C++ Standard Template Library Ausgewählte Kapitel aus Softwaretechnologie

C++ Standard Template Library Ausgewählte Kapitel aus Softwaretechnologie C++ Standard Template Library Ausgewählte Kapitel aus Softwaretechnologie Robert Fritz roggi@sbox.tugraz.at C++ Standard Template Library (STL) p.1/41 Inhalt Einführung Generisches Programmieren Aufbau

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

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

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

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

Vektoren ( #include <vector> )

Vektoren ( #include <vector> ) Vektoren ( #include ) dynamische Arrays eines beliebigen Typs mit wahlfreiem Zugriff Abstraktion von C-Feldern, unsortiert alle Algorithmen sind anwendbar (RandomAccessIterator) sehr gutes Zeitverhalten

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

Felder (Arrays) und Zeiger (Pointers) - Teil I

Felder (Arrays) und Zeiger (Pointers) - Teil I Felder (Arrays) und Zeiger (Pointers) - Teil I Felder: Motivation Wir können jetzt über Zahlen iterieren: for (int i=0; i

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

Programmieren in Java

Programmieren in Java Programmieren in Java Vorlesung 05: Generics Prof. Dr. Peter Thiemann Albert-Ludwigs-Universität Freiburg, Germany SS 2015 Peter Thiemann (Univ. Freiburg) Programmieren in Java JAVA 1 / 19 Inhalt Generics

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

15. Die Klasse string

15. Die Klasse string 15. Die Klasse string Notwendige Funktionen Erzeugen Zuweisen, Anhängen,Einfügen Löschen, Entfernen, Ersetzen Ermitteln der Größe indizierter Zugriff auf Zeichen Vergleich Suchen von Zeichen und Teil-Strings

Mehr

Programmierkurs Java

Programmierkurs Java Programmierkurs Java Java Generics und Java API (1/2) Prof. Dr. Stefan Fischer Institut für Telematik, Universität zu Lübeck https://www.itm.uni-luebeck.de/people/fischer Datenstrukturen In vielen Sprachen

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

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

Wir erinnern uns... #include <iostream> #include <vector> 163 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

Objektorientierte Programmierung II

Objektorientierte Programmierung II Objektorientierte Programmierung II OOP I Erlaubt Entwicklers, im Problemraum zu denken und zu arbeiten. Das Problem wird in eine Menge von Objekten zerlegt. Objekte wirken aufeinander, um das Problem

Mehr

Vorlesungsprüfung Programmiersprache 1

Vorlesungsprüfung Programmiersprache 1 Vorlesungsprüfung Programmiersprache 1 Termin der Prüfung: 1) Di 20.03.2018 16:15 17:00 HSB 3 2) Di 15.05.2018 16:15 17:00 HSB 3 3) Di 12.06.2018 16:15 17:00 HSB 3 Stoffgebiete: 1) Ganzzahltypen: char,

Mehr

Einstieg in die Informatik mit Java

Einstieg in die Informatik mit Java 1 / 15 Einstieg in die Informatik mit Java Collections Gerd Bohlender Institut für Angewandte und Numerische Mathematik Gliederung 2 / 15 1 Überblick Collections 2 Hierarchie von Collections 3 Verwendung

Mehr

Informatik I (D-ITET)

Informatik I (D-ITET) Informatik I (D-ITET) Übungsstunde 2, 5.10.2009 ETH Zürich? Übungsgruppenwechsel? Abgabe der Übungen... Bis Mo, 24:00 Theorie: Programme: per mail oder auf Papier.cpp Datei per mail Bin euch noch Demos

Mehr

Zeiger und dynamischer Speicher

Zeiger und dynamischer Speicher Informatik für Elektrotechnik und Informationstechnik Benedict Reuschling benedict.reuschling@h-da.de Hochschule Darmstadt Fachbereich Informatik WS 2013/14 Zuletzt aktualisiert: 09.12.2013, 07:49 Uhr

Mehr

Abschnitt 10: Datenstrukturen

Abschnitt 10: Datenstrukturen Abschnitt 10: Datenstrukturen 10. Datenstrukturen 10.1Einleitung 10.2 Peer Kröger (LMU München) Einführung in die Programmierung WS 16/17 829 / 867 Einleitung Überblick 10. Datenstrukturen 10.1Einleitung

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

Objektorientiertes Programmieren mit C++ für Fortgeschrittene

Objektorientiertes Programmieren mit C++ für Fortgeschrittene FG TECHNISCHE INFORMATIK I CQ B00 00 TH 02 Objektorientiertes Programmieren mit C++ für Fortgeschrittene Kapitel 11 11. Standard-Template-Library (STL) 11.1. Überblick 11.2. Container 11.3. Iteratoren

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

Datenstrukturen und Algorithmen. Vorlesung 5

Datenstrukturen und Algorithmen. Vorlesung 5 Datenstrukturen und Algorithmen Vorlesung 5 Inhaltsverzeichnis Vorige Woche: Sortierte Listen Zyrkuläre Listen Verkettete Listen auf Arrays Heute betrachten wir: Skip Listen ADT Set ADT Map Iterator ADT

Mehr

Grundlagen der Informatik 6. Arrays I

Grundlagen der Informatik 6. Arrays I 6. Arrays I Motivation Array (konstante Länge) Speicherbereich Eingabe von Arrays Grundlagen der Informatik (Alex Rempel) 1 Motivation Beispiel: Bildschirmpixel zeichnen Auflösung 800x600, d.h. insgesamt

Mehr

C# - Einführung in die Programmiersprache Arrays, Enumeration und Collections. Leibniz Universität IT Services Anja Aue

C# - Einführung in die Programmiersprache Arrays, Enumeration und Collections. Leibniz Universität IT Services Anja Aue C# - Einführung in die Programmiersprache Arrays, Enumeration und Collections Leibniz Universität IT Services Anja Aue Arrays... speichern mehrere Werte vom gleichen Datentyp. fassen zusammenhängende Werte

Mehr

Template-Klasse Eigenschaften Voraussetzungen Anwendungsgebiete std::vector<t> Reine Sequenz von Ts; Standard* Sortieren Dynamische Größenveränderung

Template-Klasse Eigenschaften Voraussetzungen Anwendungsgebiete std::vector<t> Reine Sequenz von Ts; Standard* Sortieren Dynamische Größenveränderung STL Container-Klassen Template-Klasse Eigenschaften Voraussetzungen Anwendungsgebiete std::vector Reine Sequenz von Ts; Sortieren Dynamische Größenveränderung Binäre Suche kein Verwaltungsoverhead Heaps

Mehr

Institut für Programmierung und Reaktive Systeme. Java 2. Markus Reschke

Institut für Programmierung und Reaktive Systeme. Java 2. Markus Reschke Java 2 Markus Reschke 07.10.2014 Datentypen Was wird gespeichert? Wie wird es gespeichert? Was kann man mit Werten eines Datentyps machen (Operationen, Methoden)? Welche Werte gehören zum Datentyp? Wie

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

1. Zeiger, Algorithmen, Iteratoren und Container. Felder als Funktionsargumente, Zeiger, Iteratoren auf Vektoren, Container

1. Zeiger, Algorithmen, Iteratoren und Container. Felder als Funktionsargumente, Zeiger, Iteratoren auf Vektoren, Container 1 1. Zeiger, Algorithmen, Iteratoren und Container Felder als Funktionsargumente, Zeiger, Iteratoren auf Vektoren, Container Arrays und Funktionen - Ein Wunder? 2 // Program: fill.cpp // define and use

Mehr

Felder (Arrays) und Zeiger (Pointers) - Teil I

Felder (Arrays) und Zeiger (Pointers) - Teil I Felder (Arrays) und Zeiger (Pointers) - Teil I Feldtypen, Sieb des Eratosthenes, Iteration, Zeigertypen, Zeigerarithmetik, dynamische Speicherverwaltung Felder: Motivation Wir können jetzt über Zahlen

Mehr

Felder (Arrays) und Zeiger (Pointers) - Teil I

Felder (Arrays) und Zeiger (Pointers) - Teil I Felder (Arrays) und Zeiger (Pointers) - Teil I Feldtypen, Sieb des Eratosthenes, Iteration, Zeigertypen, Zeigerarithmetik, dynamische Speicherverwaltung Felder: Motivation n Wir können jetzt über Zahlen

Mehr

Vorkurs Informatik WiSe 16/17

Vorkurs Informatik WiSe 16/17 Java Ausdrücke und Variablen Dr. Werner Struckmann / Stephan Mielke, Jakob Garbe, 05.10.2016 Technische Universität Braunschweig, IPS Überblick Ausdrücke, Datentypen und Variablen Kontrollstrukturen 05.10.2016

Mehr

8. Referenzen und Zeiger

8. Referenzen und Zeiger 8. Referenzen und Zeiger Motivation Variable werden in C++ an speziellen Positionen im Speicher abgelegt. An jeder Position befindet sich 1 Byte. Sie sind durchnummeriert beginnend bei 0. Diese Positionen

Mehr

Java Einführung Collections

Java Einführung Collections Java Einführung Collections Inhalt dieser Einheit Behälterklassen, die in der Java API bereitgestellt werden Wiederholung Array Collections (Vector, List, Set) Map 2 Wiederholung Array a[0] a[1] a[2] a[3]...

Mehr

Software Praktikum: C++ und LEDA / STL Sommersemester 2003

Software Praktikum: C++ und LEDA / STL Sommersemester 2003 Software Praktikum: C++ und LEDA / STL Sommersemester 2003 Oliver Zlotowski FB IV Informatik Universität Trier 20. Mai 2003 Hallo, Welt! #include int main() { std::cout

Mehr

19 Collections Framework

19 Collections Framework Collection = Containterklasse, die andere Objekte enthält. Inhalte: Schnittstellen Implementierungen Algorithmen Vorteile: Einheitlicher Zugriff auf Containerobjekte. Abstraktion von den Implementierungsdetails.

Mehr

Verbund/Struktur (record/struct)

Verbund/Struktur (record/struct) Arrays. Iteratoren. Verbund/Struktur (record/struct) Ein Verbund oder Struktur ist eine statische Datenstruktur Ein Verbund ist eine Menge von Elementen (meistens von unterschiedlichen Typen), die eine

Mehr

ALP II Dynamische Datenmengen

ALP II Dynamische Datenmengen ALP II Dynamische Datenmengen Teil III Iteratoren Iterator-Objekt O1 O2 O3 O4 SS 2012 Prof. Dr. Margarita Esponda 22. ALP2-Vorlesung, M. Esponda 2 Motivation: Iteratoren Wir haben für die Implementierung

Mehr

Die Klasse string Verfasser: Christian Bartl

Die Klasse string Verfasser: Christian Bartl Die Klasse string Verfasser: Index 1. Allgemein... 3 2. Eingabe von Strings... 3 3. Ausgabe von Strings... 4 4. Länge eines Strings... 4 5. Durchlaufen aller Zeichen eines Strings... 4 6. Kopieren von

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

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

Wir erinnern uns... #include <iostream> #include <vector> 163 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