19. STL Container Programmieren / Algorithmen und Datenstrukturen 2

Ähnliche Dokumente
Collections und Generics

1. Einführung und Unit Testing Programmieren / Algorithmen und Datenstrukturen 2

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

11. Vektoren und Pointer Programmieren / Algorithmen und Datenstrukturen 1 Prof. Dr. Bernhard Humm FB Informatik, Hochschule Darmstadt

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

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

7. Einführung in C++ Programmieren / Algorithmen und Datenstrukturen 1 Prof. Dr. Bernhard Humm FB Informatik, Hochschule Darmstadt

Exercise (Part II) Anastasia Mochalova, Lehrstuhl für ABWL und Wirtschaftsinformatik, Kath. Universität Eichstätt-Ingolstadt 1

Die C++ Standard Template Library Andreas Obrist

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

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

Einführung in die STL

Übung 3: VHDL Darstellungen (Blockdiagramme)

Data Structures and Algorithm Design

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

Assoziative Container in C++ Christian Poulter

Sortierte Assoziative Container der STL

11. Funktionale Programmierung Advanced Programming Techniques Prof. Dr. Bernhard Humm FB Informatik, Hochschule Darmstadt

Unit 1. Motivation and Basics of Classical Logic. Fuzzy Logic I 6

Exercise (Part VIII) Anastasia Mochalova, Lehrstuhl für ABWL und Wirtschaftsinformatik, Kath. Universität Eichstätt-Ingolstadt 1

Introduction to Python. Introduction. First Steps in Python. pseudo random numbers. May 2016

Titelmasterformat Object Generator durch Klicken bearbeiten

C++11. neu in C++11: range-based for. Objektorientierte Programmierung mit C++ Ersetzung durch: 1. Elementares C++ int array[] = { 1, 2, 3, 4, 5 };

Nachklausur Programmieren / Algorithmen und Datenstrukturen 1

Exercise (Part I) Anastasia Mochalova, Lehrstuhl für ABWL und Wirtschaftsinformatik, Kath. Universität Eichstätt-Ingolstadt 1

Einführung in die STL

Algebraische Spezifikation von Software und Hardware II

Die Datenmanipulationssprache SQL

Exercise (Part XI) Anastasia Mochalova, Lehrstuhl für ABWL und Wirtschaftsinformatik, Kath. Universität Eichstätt-Ingolstadt 1

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

ISO Reference Model

PONS DIE DREI??? FRAGEZEICHEN, ARCTIC ADVENTURE: ENGLISCH LERNEN MIT JUSTUS, PETER UND BOB

Softwareschnittstellen

DIBELS TM. German Translations of Administration Directions

Cassandra Query Language (CQL)

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

Username and password privileges. Rechteverwaltung. Controlling User Access. Arten von Rechten Vergabe und Entzug von Rechten DBS1 2004

Algorithms & Datastructures Midterm Test 1

ColdFusion 8 PDF-Integration

Übung Algorithmen und Datenstrukturen

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

Exercise 6. Compound Types and Control Flow. Informatik I für D-MAVT. M. Gross, ETH Zürich, 2017

Einführung in ActionScript

Java Einführung Collections

3. Dokumentieren und Testen Advanced Programming Techniques Prof. Dr. Bernhard Humm FB Informatik, Hochschule Darmstadt

Objektorientierung II & die Java Klassenbibliothek. Kristian Bergmann und Arthur Lochstampfer

Einführung in die STL 226

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

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

kurze Wiederholung class templates

Informatik II, SS 2014

Programmieren 2 C++ Überblick

VGM. VGM information. HAMBURG SÜD VGM WEB PORTAL - USER GUIDE June 2016

Ingenics Project Portal

Algorithms for graph visualization

Java Tools JDK. IDEs. Downloads. Eclipse. IntelliJ. NetBeans. Java SE 8 Java SE 8 Documentation

C++ Kurs Teil 3. Standard Template Library (STL) Exceptions Kommunikation mit der shell. Übersicht vector<> algorithm: sort, for_each map<>

Mapra: C++ Teil 5. Felix Gruber, Sven Groß. 16. Mai IGPM, RWTH Aachen. Felix Gruber, Sven Groß (IGPM) Mapra: C++ Teil 5 16.

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

Risiko Datensicherheit End-to-End-Verschlüsselung von Anwendungsdaten. Peter Kirchner Microsoft Deutschland GmbH

Übung 13: Priority Queues (Vorrangwarteschlangen 1 )

Programmier-Befehle - Woche 10

Mitglied der Leibniz-Gemeinschaft

Abgeleitete Datentypen

Angewandte Kryptografie Praktikum 1

Programmieren 3 C++ Prof. Peter Sommerlad Fredy Ulmer

Wie man heute die Liebe fürs Leben findet

Praktikum 4: Delegation

Mock Exam Behavioral Finance

"Die Brücke" von Franz Kafka. Eine Interpretation (German Edition)

Quick Guide Home Network Mode

Grundlagen der Bioinformatik Assignment 2: Substring Search SS Yvonne Lichtblau

ISU 1. Ue_08/02_Datenbanken/SQL. 08 Datenbanken. Übung. SQL Einführung. Eckbert Jankowski.

Modul 122 VBA Scribt.docx

7. Datenbank-Zugriff. Vorlesung und Übung Dr. Peter Pfahler Institut für Informatik Universität Paderborn. Zum Beispiel aus PHP-Skripten: Client 7-2

Grundlagen der Informatik 12. Strukturen

Algorithmen und Datenstrukturen in Java Jiri Spale, Algorithmen und Datenstrukturen in Java 1

Kursbuch Naturheilverfahren: Curriculum der Weiterbildung zur Erlangung der Zusatzbezeichnung Naturheilverfahren (German Edition)

ISO Reference Model

Entwicklung verteilter echtzeitfähiger Sensorsysteme

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

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

Frühling, Sommer, Herbst und Tod: Vier Kurzromane (German Edition)

FEBE Die Frontend-Backend-Lösung für Excel

Mixed tenses revision: German

Microcontroller VU Exam 1 (Programming)

Übersicht der wichtigsten MySQL-Befehle

5. Dokumentieren und Testen Advanced Programming Techniques. Wintersemester 2009 / 2010 Prof. Dr. Bernhard Humm Hochschule Darmstadt, FB Informatik

A Classification of Partial Boolean Clones

... Vorwort Einstieg in die Programmierung Ablaufsteuerung... 71

Statistics, Data Analysis, and Simulation SS 2015

MySQL-Befehle. In diesem Tutorial möchte ich eine kurze Übersicht der wichtigsten Befehle von MySQL geben.

EINFÜHRUNG IN DIE PROGRAMMIERUNG

Übung PL/SQL Trigger Lösungen

(allgemeine) OOP in C++ Klassen und header-files Konstruktorn / Destruktoren Speicherverwaltung C++ Standard Library / SLT

STL-Container und Laufzeit

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

ORM & OLAP. Object-oriented Enterprise Application Programming Model for In-Memory Databases. Sebastian Oergel

Transkript:

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 Übung Assoziative Container: map Übung 2

Kontrollfragen Was bedeutet Design by Contract? Wer schließt einen Vertrag mit wem ab? Wo wird der Vertrag beschrieben? Was sind Vorbedingungen? Wer muss sie einhalten? Was sind Nachbedingungen? Wer muss sie einhalten? Wie sollte man mit Vertragsverletzungen umgehen (defensives Programmieren)? 3

Agenda Kontrollfragen STL Container: Übersicht Übung Assoziative Container: map Übung 4

C++ Standard Template Library (STL) Eine der beliebtesten C++- Klassenbibliotheken Ergebnis jahrelanger Forschungs- und Entwicklungsarbeit bei Hewlett-Packard Verlässliche, erprobte Komponenten Konsistente, gut verständliche Architektur 1994 standardisiert (ISO/IEC 14882) http://www.cplusplus.com/reference/stl/ 5

Behälter (Container) A container is a holder object that stores a collection other objects (its elements). They are implemented as class templates, which allows a great flexibility in the types supported as elements. The container manages the storage space for its elements and provides member functions to access them, either directly or through iterators. Containers replicate structures very commonly used in programming: dynamic arrays (vector), queues (queue), stacks (stack), heaps (priority_queue), linked lists (list), trees (set), associative arrays (map)... Quelle: http://www.cplusplus.com/reference/stl/ 6

Übersicht Container-Klassen STL Quelle: http://www.cplusplus.com/reference/stl/ 7

8

9

Elemente eines Containers iterieren (1/2) Für Container mit Direktzugriff mittels operator[ ] (z.b. Vector): for (unsigned int i = 0; i < v.size(); ++i) { sum += v[i]; } Mittels Iterator (funktioniert für alle STL Container): for (vector<float>::iterator it = v.begin(); it < v.end(); ++it) { sum += *it; } Einfacher in C++11 mit auto (Typ Inferenz) 10 for (auto it = v.begin(); it < v.end(); ++it) { sum += *it; } Compiler setzt automatisch korrekten Datentyp des Iterators ein

Elemente eines Containers iterieren (2/2) Noch einfacher mittels erweiterter for Schleife in C++11: for (float x : v) { sum += x; } Bzw. mit auto (Typ Inferenz): Schleifenvariable wird jeweils auf nächstes Element gesetzt for (auto x : v) { sum += x; } Bzw. mittels Call-By-Reference: for (auto &x : v) { sum += x; } 11

C++11 in NetBeans aktivieren Project Properties C++ Compiler 12

Weiterführende Literatur B. Stroustrup: The C++ Programming Language 3rd Edition http://www.ib.cnea.gov.ar/~oop/biblio/bjarne_stroustrup_- _The_C++_Programming_Language_3rd_Ed.pdf - 3.7 Containers - 3.8.1 Use of Iterators - 16. Library Organization and Containers 13

Agenda Kontrollfragen STL Container: Übersicht Übung Assoziative Container: map Übung 14

Übung Angelehnt an: B. Stroustrup: The C++ Programming Language, 16.5 15 1. Create a vector<char> containing the letters of the alphabet in order. Print the elements of that vector in order and in reverse order 2. Create a vector<string> and initialize it with some names of fruits. Sort the list. 3. Using the vector from exercise 2, select the names of all fruits with the initial letter 'a'. 4. Using the vector from exercise 2, write a loop to delete all fruits with the initial letter 'a'. 5. Using the vector from exercise 2, write a loop to delete all citrus fruits. 6. Using the vector from exercise 2, write a loop to delete all fruits that you don't like.

Agenda Kontrollfragen STL Container: Übersicht Übung Assoziative Container: map Übung 16

Assoziative Container: map Sequence of (key,value) pairs that provides for fast retrieval based on the key Each key in a map is unique Requires that a less-than operation (<) exists for its key types Keeps its elements sorted so that iteration occurs in order Quelle: B. Stroustrup: The C++ Programming Language, 17.4 Siehe http://www.cplusplus.com/reference/map/map/ 17

Operator[ ] Beispiel: Telefonbuch #include <map> #include <string> map<string, string> phonebook; phonebook["meier"] = "123"; phonebook["müller"] = "456"; phonebook["huber"] = "789"; Einfügen von Key-Value- Paaren in die Map Auslesen des Values für einen existierenden Key string number = phonebook["müller"]; // 456 18

Zugriff mittels at Achtung: bei nicht existierendem Element, z.b. number = phonebook["blabla"]; wird ein neues Element (in diesem Fall "") eingefügt (!) Abhilfe: Methode at (C++11) wirft out_of_range exception bei nicht vorhandenem Element try { number = phonebook.at("blabla"); } catch (out_of_range& ex) { // alternative logic... } 19

Low-level Zugriff mit insert, find Beispiel: Telefonbuch: map<string, string> phonebook; Einfügen von Key-Value- Paaren in die Map phonebook.insert( pair<string, string>("meier", "123")); phonebook.insert( pair<string, string>("müller", "456")); phonebook.insert( pair<string, string>("huber", "789")); auto result = phonebook.find("meier"); if (result!= phonebook.end()) { string number = result->second; } find liefert einen Iterator auf ein pair Prüfung auf Existenz durch Vergleich mit end() 20 auto result = phonebook.find("blabla"); if (result!= phonebook.end()) { string number = result->second; }

Mmber Functions 21

Agenda Kontrollfragen STL Container: Übersicht Übung Assoziative Container: map Übung 22

Übung: Histogramm Zählen Sie die Häufigkeit von Worten in einer Liste / Vector und geben Sie diese als map<string, int> zurück, z.b.: - Input: {Apfel, Birne, Apfel, Banane} - Output: Apfel 2, Birne 1, Banane 1 Gestalten Sie die Außensicht sorgfältig (Klasse? / Funktion? / Eingabeparameter? / Rückgabe?) 23