C-Arrays vs. C++-Container
|
|
- Frida Krüger
- vor 5 Jahren
- Abrufe
Transkript
1 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 einzelnen Elementes), die Anzahl der Elemente (Dimension) muss bei der Definition als Konstante vorgegeben werden: int i, x[20], y[1]; // x enthält 20 Elemente, y nur 1 // ABER: y ist KEIN int, sondern ein int-array char zeile[81]; // Platz für 80 Zeichen + das Nullbyte!!!! const int dim = 13; double x[dim]; // Fehler: keine Konstante als Dimension constexpr int dim = 13; double x[dim]; // ok WICHTIG: Die Array-Elemente beginnen immer mit dem Index 0; der Index wird in eckigen Klammern geschrieben, es ist nur ein Index möglich (also nicht z.b. Zeile/Spalte) : x[0] = 17; x[20] = 0; // setzt allererstes Array-Element // Fehler: dieses Element gibt es nicht mehr for (i = 0; i < 20; ++i) x[i] = i; // x = {0, 1, 2,..., 19} for (i = 0; i <= 20; ++i) x[i] = i; // Fehler: x[20] existiert nicht for (auto i : x) // nur in C++ ab C++11 cout << i << '\n'; // gib alle Werte aus for (auto& i : x) // nur in C++ ab C++11 i = 1; // setze alle Werte auf 1 Arrays können als Ganzes oder teilweise initialisiert werden. int x[20] = {1, 2, 3, 4, 5, 6}; // nur die ersten 6 Werte werden gesetzt, der Rest wird mit 0 aufgefüllt int x[20]{1, 2, 3, 4, 5, 6}; // (ohne =) bedeutet dasselbe (ab C++11)
2 int y[] = {1, 2, 3, 4}; // y wird dadurch zu einem int[4] int z[10] = {}; // alle 10 Elemente werden mit 0 belegt x = {1, 2, 3}; // FEHLER: Das geht nur bei der Initialisierung Die auch in C++ verwendeten C-String-Literale (Zeichenketten-Konstante) wie "blabla" sind genau solche (konstante) C-Arrays aus char (hier char[7]). Arrays haben natürlich auch Nachteile: Man kann unbemerkt die Arraygrenzen überschreiten, die Dimension ist schon zur Übersetzungszeit festzulegen und kann nachträglich nicht geändert werden usw. Aus diesem Grund besitzen die moderneren Varianten C++ (und auch Java) Ersatzlösungen, die diesen Komfort zusätzlich bieten: Container bzw. genauer Container-Template-Klassen. Es gibt einige vordefinierte Containertypen (Array, Vector, Menge, Liste,...). Die STL = Standard Template Library Diese Bibliothek hat sich seit C++11 als zentraler Bestandteil von C++ etabliert. Mit jeder C++ Evolution wird der Inhalt ausgebaut und optimiert. Sie definiert die sogenannten Container- Templates, die beliebige Datentypen in nahezu beliebigen Speicherformen aufnehmen können, sowie einige wichtige Algorithmen für diese Container. Der Typ der gespeicherten Objekte steht dabei in Spitzklammern, es handelt sich demnach um Templates (genaueres dazu kommt später). Das std::array-template Nach dem Inkludieren der Headerdatei array steht dem C++-Programmierer das Klassentemplate std::array<t, Dim> zur Verfügung, welches ähnlich wie ein C-Array von T mit der Dimension Dim verwendet werden kann. Der Grundtyp T und die konstante Dimension Dim muss in den Spitzklammern angegeben werden std::array<double, 100> x; // erzeugt array mit 100 double-werten std::array <double, 3> x = { 1., 2., 3.}; // erzeugt array mit den 3 Werten 1.0, 2.0, 3.0 std::array <double, 3> x{ 1., 2., 3.}; // dasselbe x[1] = 2.0; // setzt 2. Element auf 2.0 (gleich wie bei C-Array) std::cout << "x hat " << x.size() << " Elemente\n";
3 Das std::vector-template Nach dem Inkludieren der Headerdatei vector steht dem C++-Programmierer das Klassentemplate std::vector<t> zur Verfügung, welches ähnlich wie ein T-Array verwendet werden kann. Der Grundtyp T muss in Spitzklammern angegeben werden: std::vector<double> x; // erzeugt leeren vector, der wachsen kann std::vector<double> x(100); // erzeugt vector mit 100 Werten 0.0 std::vector<double> x(100, 1.); // erzeugt vector mit 100 Werten 1.0 std::vector<double> x = {1., 2., 3.}; // erzeugt vector mit den 3 Werten 1.0, 2.0, 3.0 std::vector<double> x{1., 2., 3.}; // dasselbe x[1] = 2.0; // setzt 2. Element auf 2.0 (gleich wie bei Array) std::cout << "x hat derzeit " << x.size() << " Elemente\n"; x.push_back(20.); // hänge hinten 20.0 an den vector an, dieser wächst Das std::list-template Nach dem Inkludieren der Headerdatei list steht dem C++-Programmierer das Klassentemplate std::list<t> zur Verfügung, welches die Daten als (doppelt verkettete Liste verwaltet). Der Grundtyp T muss in Spitzklammern angegeben werden. Die Liste gestattet keinen wahlfreien Zugriff mit Indexklammer, kann dafür an jeder Position schnell neue Elemente einfügen und ist daher gut für Datenbank-Anwendungen geeignet. std::list<double> x; // erzeugt leere list, die wachsen kann std::list<double> x{ 1., 2., 3.}; // erzeugt Liste mit diesen 3 Elementen x[1] = 2.0; // Fehler: eine Liste hat keinen Index-Zugriff std::cout << "x hat derzeit " << x.size() << " Elemente\n"; x.push_back(20.); // hänge hinten 20.0 an die Liste an Unterschiede zwischen C-Array und einigen C++-Containern: C-Array: + geht in C/C++/Java gleich
4 + ist ein bisschen schneller im Zugriff - Größe muss zur Compilezeit festgelegt werden - kann weder wachsen noch schrumpfen - bei zu großen Arrays besteht die Gefahr eines Programmabsturzes (am Stack) - weiß nicht, wie viele Elemente tatsächlich enthalten sind - Zugriff mit Index [] auch außerhalb der Arraygrenzen möglich - bei Übergabe an Funktionen zerfällt das Array (zu einem Pointer auf den Beginn) std::array: + kann wie ein C-Array verwendet werden (Indexzugriff) + weiß seine fixe Größe (size() Methode) + kann ohne Zeitverlust bei Bedarf in ein C-Array umgewandelt werden + Zugriff innerhalb der Grenzen kann überwacht werden (at() Methode) + bei Übergabe an Funktionen bleibt der Typ erhalten + besitzt noch weitere nützliche Methoden (z.b. size()) - Größe muss zur Compilezeit festgelegt werden - kann weder wachsen noch schrumpfen - bei zu großen arrays besteht die Gefahr eines Programmabsturzes (am Stack) std::vector: + kann beliebig groß werden + kann wie ein C-Array verwendet werden + weiß seine Größe (size() Methode) + kann ohne Zeitverlust bei Bedarf in ein C-Array umgewandelt werden + Zugriff innerhalb der Grenzen kann überwacht werden (at() Methode) + bei Übergabe an Funktionen bleibt der Typ erhalten + keine Gefahr eines Programm-Absturzes (da am Heap) + besitzt noch weitere nützliche Methoden (z.b. size()) + ist sehr schnell (ist daher der meistverwendete Containertyp, der wachsen kann) - beim Wachsen kann sich der Speicherort der Daten ändern std::list: + kann beliebig groß werden + weiß seine Größe (size() Methode) + keine Gefahr eines Programm-Absturzes (am Heap) + kann an jeder Stelle schnell Elemente einfügen oder löschen + bei Übergabe an Funktionen bleibt der Typ erhalten + besitzt noch weitere nützliche Methoden (z.b. size()) - kein Zugriff mit dem Index-Operator möglich
5 - nur sequenzieller Zugriff möglich, daher langsam std::string: (entspricht einem std::vector<char> mit weiteren nützlichen Methoden) Stack: Ein Speicherbereich mit fester Größe. Ist dieser voll, stürzt das Programm ab. Hier werden z.b. die Funktionsargumente und die lokalen Variablen angelegt. Heap: Ein Speicherbereich, der wachsen kann. Ist dieser voll, besorgt sich C++ vom Betriebssystem Nachschub. Hier werden dynamische Daten (deren Umfang sich ändern kann) angelegt. Die Container-Typen verwenden eine feste Größe an Stack-Speicher (für die Verwaltung der Daten) und speichern die eigentlichen Daten am Heap. Sie bestehen also aus 2 getrennten Datenblöcken. Im Allgemeinen fällt die Entscheidung in C++ fast immer zugunsten eines Containers. Wir verwenden in den Übungen fast ausschließlich std::string, std::array, std::vector, da in der Mathematik sehr häufig (Matrizen, Vektoren) solche Container mit wahlfreiem Indexzugriff benötigt werden. Abseits der Mathematik (z.b. bei Datenbanken) benötigt man statt des Indexzugriffs eher die Möglichkeit, neue Elemente überall einzufügen oder alte Elemente zu löschen, wofür etwa (doppelt) verkettete Listen manchmal besser geeignet sind (std::list). Weitere Speicherstrukturen der STL sind z.b. für Bäume: #include <set> (oder #include <unordered_set>) für Hash-Tabellen: #include <map> Wichtige Methoden der gebräuchlichen Container-Templates Eine vollständige Liste aller Containermethoden findet man im WWW! Die folgenden Methoden werden von fast allen Containertypen unterstützt: size() front() back() begin(), end() Anzahl der Elemente des Containers; Ergebnis std::size_t (meist unsigned long) Das erste Elemente des Containers; Ergebnis ist Referenz auf das Element Das letzte Elemente des Containers; Ergebnis ist Referenz auf das Element Iteratoren auf das 1., hinter das letzte Element Ergebnis: iterator
6 cbegin(), cend() konstante Iteratoren auf das 1., hinter das letzte Element Ergebnis: const_iterator rbegin(), rend() reverse Iteratoren auf das letze, vor das 1. Element Ergebnis: reverse_iterator crbegin(), crend() konstante reverse Iter. auf das letze, vor das 1. Element Ergebnis: const_reverse_iterator empty() ob der Container Elemente enthält Ergebnis: bool push_back(val) fügt val hinten an den Container an (nicht bei array) Ergebnis: void insert(it, val) fügt val an der Iterator-Position it ein (nicht bei array) Ergebnis: void Konstruktoren mit Werten in geschwungen Klammern (nicht bei array, diese können aber ebenfalls mit solchen Listen initialisiert werden. Dabei handelt es sich aber genau genommen um keine Konstruktoren.) std::list<int> v{1, 2, 3, 5}; // kreiert int-list mit Werten 1, 2, 3, 5 for (auto it = v.cbegin(); it!= v.cend(); ++it) cout *it << '\n ' ; // klassische Iteratoren-Schleife // statt range-based for Ich verwende in dieser Lehrveranstaltung die Methodenaufrufe wie v.cbegin(), v.cend(), nicht sondern rufe statt dessen die analogen Funktionen der STL auf: std::cbegin(v), std::cend(v)... Der Grund dafür ist, dass diese Funktionen sowohl für die Containertypen als auch für C-Arrays funktionieren, letztere aber keine Methoden besitzen. for (auto i : {-1, -5, 10}) v.push_back(i); // an v hinten anhängen cout << "erstes Element: " << v.front() << '\n ' ; cout << "letztes Element: " << v.back() << '\n ' ; std::array<t>, std::vector<t> (und std::deque<t>, std::string) haben auch: Indexzugriff mit eckigen Klammern [3] Index-Zugriff mit Überprüfung, ob vorhanden: at(3)
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
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...
MehrTemplate-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
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
MehrProgrammieren 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
MehrC-Pointer (Zeiger, Adressen) vs. C++ Referenzen
C-Pointer (Zeiger, Adressen) vs. C++ Referenzen Der Pointer (C/C++): In C/C++ ist der Pointer ein eigener Datentyp, der auf Variablen/Objekte zeigen kann. Indem man den Pointer dereferenziert, gewinnt
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
Mehr9. Vektoren. (auch Felder/array)
9. Vektoren (auch Felder/array) Motivation Hat man mehrere Objekte gleichen Datentyps, so kann man sie explizit deklarieren, wenn die Anzahl bekannt ist double x1,x2,x3,x4; Nachteile: versagt, -wenn die
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
Mehr19. 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
Mehr19. 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
MehrInformatik. Pointer (Dynamisch) Vorlesung. 17. Dezember 2018 SoSe 2018 FB Ing - SB Umwelttechnik und Dienstleistung - Informatik Thomas Hoch 1
Informatik Vorlesung 08 Pointer (Dynamisch) 17. Dezember 2018 SoSe 2018 FB Ing - SB Umwelttechnik und Dienstleistung - Informatik Thomas Hoch 1 Pointer (Zeiger) Dynam. Speicher Bisher: Speicherbedarf muss
MehrEinfü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,
Mehr19. 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
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
MehrArrays. Theorieteil. Inhaltsverzeichnis. Begriffe. Programmieren mit Java Modul 3. 1 Modulübersicht 3
Programmieren mit Java Modul 3 Arrays Theorieteil Inhaltsverzeichnis 1 Modulübersicht 3 2 Eindimensionale Arrays 3 2.1 Arrays deklarieren.............................. 3 2.2 Arrays erzeugen................................
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
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
MehrDatenkapselung: public / private
627 18. Klassen Klassen, Memberfunktionen, Konstruktoren, Stapel, verkettete Liste, dynamischer Speicher, Copy-Konstruktor, Zuweisungsoperator, Destruktor, Konzept Dynamischer Datentyp Datenkapselung:
MehrArrays (Felder/Vektoren)
Arrays (Felder/Vektoren) Zusammenfassung mehrerer Variablen des gleichen Typs unter einem Namen im Speicher direkt hintereinander abgelegt Definition: Typname Arrayname [Größe]; Beispiel: int ar [5]; Zugriff
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
MehrAlgorithmen und Datenstrukturen
Algorithmen und Datenstrukturen Dynamische Datenobjekte Pointer/Zeiger, Verkettete Liste Eigene Typdefinitionen 1 Zeigeroperatoren & und * Ein Zeiger ist die Speicheradresse irgendeines Objektes. Eine
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
MehrOrganisatorisches. Folien (u.a.) auf der Lva-Homepage Skriptum über MU Online
Organisatorisches Folien (u.a.) auf der Lva-Homepage Skriptum über MU Online Nächste Woche VO und UE am Dienstag, den 30.10.! UE im CR IL/IT Wissensüberprüfung am Zettel 25.10.2018 IT I - VO 3 1 Organisatorisches
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)
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
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
MehrOrganisatorisches. Neue Übungsblätter: Nur mehr elektronisch? Abgabe Di, , 14 Uhr bis Do, , 8Uhr
Organisatorisches Neue Übungsblätter: Nur mehr elektronisch? Abgabe Di, 14.10., 14 Uhr bis Do, 23.10., 8Uhr. 14.10.2014 IT I - VO 1 1 IT I: Heute Wiederholung CuP ctd: this Arrays, ArrayLists Schleifen:
MehrC++ Notnagel. Ziel, Inhalt. Programmieren in C++
C++ Notnagel Ziel, Inhalt Ich versuche in diesem Dokument noch einmal die Dinge zu erwähnen, die mir als absolut notwendig für den C++ Unterricht und die Prüfungen erscheinen. C++ Notnagel 1 Ziel, Inhalt
MehrSTL-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
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
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
MehrMehrdimensionale Arrays
Mehrdimensionale Arrays Prof. Dr.-Ing. Thomas Schwotzer 1 Einführung Eindimensionale Arrays haben wir bereits kennen gelernt. Es gibt aber auch mehrdimensionale Arrays. Die sind auch sehr notwendig, denken
MehrOrganisatorisches. drei Gruppen Gruppe 1: 10:10-11:40, Gruppe 2: 11:45-13:15 Gruppe 3: 13:20-14:50
Organisatorisches Vorlesung Donnerstag 8:35 bis 10:05 Übung drei Gruppen Gruppe 1: 10:10-11:40, Gruppe 2: 11:45-13:15 Gruppe 3: 13:20-14:50 Tutorium (Mehr oder weniger) abwechselnd Mo und Mi 10-11:30 Termine
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
MehrOrganisatorisches. Folien (u.a.) gibt's auf der Lva-Homepage zum Download
Organisatorisches Folien (u.a.) gibt's auf der Lva-Homepage zum Download Diesen Mi erstes Tutorium (15-17) Ab nächster Woche montags 10-12 (jeweils im Computerraum) 17.10.2017 IT I - VO 3 1 Organisatorisches
MehrEinstieg in die Informatik mit Java
1 / 21 Einstieg in die Informatik mit Java Felder, eindimensional Gerd Bohlender Institut für Angewandte und Numerische Mathematik Gliederung 2 / 21 1 Überblick: Was sind Felder? 2 Vereinbarung von Feldern
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
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
MehrÜBUNGS-BLOCK 7 LÖSUNGEN
ÜBUNGS-BLOCK 7 LÖSUNGEN Aufgabe 1: Gegeben ist folgender Code: Auto[] array = new Auto[3]; // Alle Autos im Array tunen: for (int i = 1; i
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
MehrElementare Datentypen in C++
Elementare Datentypen in C++ bool signed/unsigned char signed/unsigned short int signed/unsigned int signed/unsigned long int (signed/unsigned long long int) float double long double void enum char Der
MehrWertebereich und Genauigkeit der Zahlendarstellung
Wertebereich und Genauigkeit der Zahlendarstellung Sowohl F als auch C kennen bei ganzen und Floating Point-Zahlen Datentypen verschiedener Genauigkeit. Bei ganzen Zahlen, die stets exakt dargestellt werden
MehrDie 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
MehrEinführung in die Programmiersprache C
Einführung in die Programmiersprache C 2 Arrays und Pointer Alexander Sczyrba Robert Homann Georg Sauthoff Universität Bielefeld, Technische Fakultät statische Arrays Deklaration (eindimensional): /* 40
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
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
MehrSchleifen in C/C++/Java
Schleifen in C/C++/Java Alle 3 Sprachen stellen mindestens die folgenden 3 Schleifenkonstruktionen zur Verfügung. In C gibt es auch keine weiteren, C++, Java und C# haben noch weitere nützliche Varianten.
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
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
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,
MehrEinfü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:
MehrComputeranwendung und Programmierung (CuP)
Computeranwendung und Programmierung (CuP) ArrayList 0 1 2 Obj0 Obj1 size() - 1 15.12.2014 CuP - VO 2 Auer 1 ArrayList import java.util.arraylist; ArrayList buchliste; buchliste = new ArrayList();
MehrProgrammieren in C. Rekursive Strukturen. Prof. Dr. Nikolaus Wulff
Programmieren in C Rekursive Strukturen Prof. Dr. Nikolaus Wulff Rekursive Strukturen Häufig müssen effizient Mengen von Daten oder Objekten im Speicher verwaltet werden. Meist werden für diese Mengen
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:
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
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
MehrProgrammierung mit C Zeiger
Programmierung mit C Zeiger Zeiger (Pointer)... ist eine Variable, die die Adresse eines Speicherbereichs enthält. Der Speicherbereich kann... kann den Wert einer Variablen enthalten oder... dynamisch
MehrGraphdurchmusterung, Breiten- und Tiefensuche
Prof. Thomas Richter 18. Mai 2017 Institut für Analysis und Numerik Otto-von-Guericke-Universität Magdeburg thomas.richter@ovgu.de Material zur Vorlesung Algorithmische Mathematik II am 18.05.2017 Graphdurchmusterung,
MehrFelder (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
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
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
MehrObjektorientierte Programmierung mit C++ Vector und List
Vector und List Ziel, Inhalt Wir lernen die Klassen vector und list aus der Standard-C++ Library kennen und anwenden. In einer Übung wenden wir diese Klassen an um einen Medienshop (CD s und Bücher) zu
Mehr6 ZEIGER UND REFERENZEN - ALLGEMEINES
6 ZEIGER UND REFERENZEN - ALLGEMEINES Leitideen: Zeiger sind Adressen mit zusätzlicher Typinformation über das dort gespeicherte Objekt. Die Vereinbarungssyntax soll der Ausdruckssyntax entsprechen und
MehrProblem: 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
MehrKapitel 4: Bäume i. 1. Einleitung. 2. Ein Datenmodell für Listen. 3. Doppelt-verkettete Listen. 4. Bäume. 5. Das Collections-Framework in Java
Kapitel 4: Bäume i 1. Einleitung 2. Ein Datenmodell für Listen 3. Doppelt-verkettete Listen 4. Bäume 5. Das Collections-Framework in Java Prof. Dr. Peer Kröger: EiP (WS 18/19) Teil 11: Datenstrukturen
Mehr12. Dynamische Datenstrukturen
Motivation: Stapel. Dynamische Datenstrukturen Verkettete Listen, Abstrakte Datentypen Stapel, Warteschlange, Implementationsvarianten der verketteten Liste 0 04 Motivation: Stapel ( push, pop, top, empty
MehrC-Pointer (Zeiger, Adressen) vs. C++ Referenzen
C-Pointer (Zeiger, Adressen) vs. C++ Referenzen Der Pointer (C/C++): In C/C++ ist der Pointer ein eigener Datentyp, der auf Variablen/Objekte zeigen kann. Indem man den Pointer dereferenziert, gewinnt
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
MehrZeiger in C und C++ Zeiger in Java und C/C++
1 Zeiger in Java und C/C++ Zeigervariable (kurz: Zeiger, engl.: pointer): eine Variable, die als Wert eine Speicheradresse enthält Java: Zeiger werden implizit für Referenztypen (Klassen und Arrays) verwendet,
Mehr12. Felder (Arrays) II
416 12. Felder (Arrays) II Strings, Lindenmayer-Systeme, Mehrdimensionale Felder, Vektoren von Vektoren, Kürzeste Wege, Felder und Vektoren als Funktionsargumente Strings als Felder 417 sind repräsentierbar
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,
MehrTeil 8: Dynamische Speicherverwaltung. Prof. Dr. Herbert Fischer Fachhochschule Deggendorf Prof. Dr. Manfred Beham Fachhochschule Amberg-Weiden
Teil 8: Dynamische Speicherverwaltung Prof. Dr. Herbert Fischer Fachhochschule Deggendorf Prof. Dr. Manfred Beham Fachhochschule Amberg-Weiden Inhaltsverzeichnis 8 Dynamische Speicherverwaltung... 3 8.1
Mehr12.3 Ein Datenmodell für Listen
Zweiter Versuch: Wir modellieren ein Element der Liste zunächst als eigenständiges Objekt. Dieses Objekt hält das gespeicherte Element. Andererseits hält das Element- Objekt einen Verweis auf das nächste
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
MehrProgrammiertechnik. Teil 4. C++ Funktionen: Prototypen Overloading Parameter. C++ Funktionen: Eigenschaften
Programmiertechnik Teil 4 C++ Funktionen: Prototypen Overloading Parameter C++ Funktionen: Eigenschaften Funktionen (Unterprogramme, Prozeduren) fassen Folgen von Anweisungen zusammen, die immer wieder
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.
MehrC++ - Einführung in die Programmiersprache Zeiger, Referenzen und Strukturen. Leibniz Universität IT Services Anja Aue
C++ - Einführung in die Programmiersprache Zeiger, Referenzen und Strukturen Leibniz Universität IT Services Anja Aue Zeiger (Pointer) Verweis auf eine Speicherstelle. Speicherung einer Speicheradresse.
Mehr1. Übung zu "Numerik partieller Differentialgleichungen"
1. Übung zu "Numerik partieller Differentialgleichungen" Simon Gawlok, Eva Treiber Engineering Mathematics and Computing Lab 22. Oktober 2014 1 / 15 1 Organisatorisches 2 3 4 2 / 15 Organisatorisches Ort:
MehrProbeklausur Name: (c)
Einführung in die Praktische Informatik 30.1.2013 Probeklausur Name: Teil I: Datentypen (20 Punkte) Lösen sie die Probleme, indem sie die korrekten Lösungen ankreuzen bzw. in die vorgesehenen Freiräume
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
MehrEinstieg in die Informatik mit Java
1 / 26 Einstieg in die Informatik mit Java Felder Gerd Bohlender Institut für Angewandte und Numerische Mathematik Gliederung 2 / 26 1 Was sind Felder? 2 Vereinbarung von Feldern 3 Erzeugen von Feldern
MehrZeiger, Arrays und Strings in C und C++
Zeiger, Arrays und Strings in C und C++ 1 Zeiger in Java und C/C++ Zeigervariable (kurz: Zeiger, engl.: pointer): eine Variable, die als Wert eine Speicheradresse enthält Java: Zeiger werden implizit für
MehrTeil 5: Felder, Zeiger, Zeigerarithmetik Gliederung
Teil 5: Felder, Zeiger, Zeigerarithmetik Gliederung Felder (Arrays) Mehrdimensionale Felder Zeiger und Adressen Zeigerarithmetik Felder Mehrdimensionale Felder Zeiger und Adressen Zeigerarithmetik Felder
MehrArrays. Einleitung. Deklarieren einer Array Variablen
Arrays Einleitung bisher jede Variable einzeln deklariert: 12 3 14 12 32 32 3 32 5 3 double sum; int count; ÿ Sie können Zweck und Aufbau von Array-Datentypen erklären ÿ Sie können einen Array korrekt
MehrFelder (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
MehrC++ Teil 5. Sven Groß. 16. Nov Sven Groß (IGPM, RWTH Aachen) C++ Teil Nov / 16
C++ Teil 5 Sven Groß 16. Nov 2015 Sven Groß (IGPM, RWTH Aachen) C++ Teil 5 16. Nov 2015 1 / 16 Themen der letzten Vorlesung Namensräume Live Programming zu A2 Gleitkommazahlen Rundungsfehler Auswirkung
MehrPraxis der Programmierung
Arrays, Pointerarithmetik, Konstanten, Makros Institut für Informatik und Computational Science Henning Bordihn Einige Folien gehen auf A. Terzibaschian zurück. 1 Arrays (Felder/Vektoren) 2 Arrays: Motivation
MehrFelder. Gerd Bohlender. Einstieg in die Informatik mit Java, Vorlesung vom
Einstieg in die Informatik mit Java, Vorlesung vom 9.5.07 Übersicht 1 Was sind? 2 Vereinbarung von n 3 Erzeugen von n 4 Zugriff auf Feldkomponenten 5 Mehrdimensionale 6 als Objekte, Referenzen Kopieren
MehrFelder (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
MehrC++ - Objektorientierte Programmierung Konstante und statische Elemente
C++ - Objektorientierte Programmierung Konstante und statische Elemente hat eine Kantenlänge hat eine Füllfarbe Kantenlänge setzen Füllfarbe lesen Volumen berechnen Leibniz Universität IT Services Anja
MehrBetriebssysteme, Rechnernetze und verteilte Systeme 1. Crashkurs C (2)
Betriebssysteme, Rechnernetze und verteilte Systeme 1 Crashkurs C (2) Olaf Spinczyk Arbeitsgruppe Eingebettete Systemsoftware Lehrstuhl für Informatik 12 TU Dortmund olaf.spinczyk@tu-dortmund.de http://ess.cs.uni-dortmund.de/teaching/ss2008/bsrvs1/
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
MehrTeil 5: Zeiger, Felder, Zeichenketten Gliederung
Teil 5: Zeiger, Felder, Zeichenketten Gliederung Zeiger und Adressen Felder (Arrays) Zeichenketten (Strings) Zeigerarithmetik Mehrdimensionale Felder Zeiger und Adressen Felder Zeichenketten Zeigerarithmetik
Mehr5.4 Arrays. Oft müssen viele Werte gleichen Typs gespeichert werden. Idee: Lege sie konsekutiv ab! Greife auf einzelne Werte über ihren Index zu!
5.4 Arrays Oft müssen viele Werte gleichen Typs gespeichert werden. Idee: Lege sie konsekutiv ab! Greife auf einzelne Werte über ihren Index zu! Feld: Index: 17 3-2 9 0 1 0 1 2 3 4 5 Harald Räcke 114/656
MehrC# - 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
Mehr1. Referenzdatentypen: Felder und Strings. Referenz- vs. einfache Datentypen. Rückblick: Einfache Datentypen (1) 4711 r
1. Felder und Strings Eigenschaften von Referenzdatentypen 1. Referenzdatentypen: Felder und Strings Referenzdatentypen sind Konstrukte, mit deren Hilfe wir aus einfachen Datentypen neue eigene Typen erzeugen
Mehr1. Referenzdatentypen: Felder und Strings
1. Felder und Strings Eigenschaften von Referenzdatentypen 1. Referenzdatentypen: Felder und Strings Referenzdatentypen sind Konstrukte, mit deren Hilfe wir aus einfachen Datentypen neue eigene Typen erzeugen
Mehr