1 / 37

Fortgeschrittene C-Programmierung

ksena
Download Presentation

Fortgeschrittene C-Programmierung

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


    1. Vorlesung: "Fortgeschrittene C++-Programmierung" 25.09.2012 Fortgeschrittene C++-Programmierung SS 2005 Teil 11: “Büchereien – 1. Überblick” Knut Reinert - reinert@inf.fu-berlin.de

    2. Vorlesung: "Fortgeschrittene C++-Programmierung" 2 Die Standard Library – Überblick Überblick: Die Header-Dateien 32 C++ Library Headers und 18 C Library Headers. Die C-Library Header entsprechen den üblichen Headern, wie sie schon längere Zeit bei C Standard sind und waren, jedoch mit einem zusätzlichen „c“ am Anfang, und ohne „.h“ am Ende. Statt „stdio.h“ heißt der Header für die C standard Library zur Ein- und Ausgabe also „cstdio“. Die Definitionen in diesen Dateien sind zum großen Teil in den Namespace std gewandert. Ansonsten gibt es hier und da kleinere Unterschiede zu den üblichen C-Library Dateien. [Literatur & Links: - ISO-IEC- 14882 (1992): Programming languages - C++, Kapitel 17 - 27 „C-Library Reference Guide“: http://www.acm.uiuc.edu/webmonkeys/book/c_guide/ ]32 C++ Library Headers und 18 C Library Headers. Die C-Library Header entsprechen den üblichen Headern, wie sie schon längere Zeit bei C Standard sind und waren, jedoch mit einem zusätzlichen „c“ am Anfang, und ohne „.h“ am Ende. Statt „stdio.h“ heißt der Header für die C standard Library zur Ein- und Ausgabe also „cstdio“. Die Definitionen in diesen Dateien sind zum großen Teil in den Namespace std gewandert. Ansonsten gibt es hier und da kleinere Unterschiede zu den üblichen C-Library Dateien. [Literatur & Links: - ISO-IEC- 14882 (1992): Programming languages - C++, Kapitel 17 - 27 „C-Library Reference Guide“: http://www.acm.uiuc.edu/webmonkeys/book/c_guide/ ]

    3. Vorlesung: "Fortgeschrittene C++-Programmierung" 3 Überblick (2) Aufgaben der Standardbibliothek: Language Support Library Diagnostic Library General Utilities Library Strings Library Localization Library Containers Library Iterators Library Algorithms Library Numerics Library Input/Ouput Library

    4. Vorlesung: "Fortgeschrittene C++-Programmierung" 4 1. Language Support Library 1.1 Types <cstddef> definiert u.A. size_t, ptrdiff_t 1.2 Implementation properties <limits> typabhängige numeric limits <climits> z.B. CHAR_BIT, INT_MAX, ... <cfloat> z.B. FLT_EPSILON, DBL_MAX, ... 1.3 Start and termination <cstdlib> definiert u.A. abort(), exit(), atexit() Mit <limits> wird im Grunde alle Funktionalität von <climits> und <cfloat> abgedeckt. Mit atexit() können Funktionen registriert werden, die bei Programmende abgearbeitet werden. Anmerkung: Unterstrichene Header sind solche, die der Autor dieser Folien für besonders wichtig hält. Mit <limits> wird im Grunde alle Funktionalität von <climits> und <cfloat> abgedeckt. Mit atexit() können Funktionen registriert werden, die bei Programmende abgearbeitet werden. Anmerkung: Unterstrichene Header sind solche, die der Autor dieser Folien für besonders wichtig hält.

    5. Vorlesung: "Fortgeschrittene C++-Programmierung" 5 1. Language Support Library 1.4 Dynamic memory management <new> definiert alternative operator new- und operator delete- Funktionen 1.5 Type identification <typeinfo> definiert class type_info für typeid-Operator 1.6 Exception handling <exception> definiert verschiedene Hilfsfunktionen für exception Handling. (examples all from Nicolai Josuttis book: The C++ standard library) <exception> stellt einige Funktionen bereit, die das Handling von terminate und unexpected vereinfachen. Außerdem wird in <exception> die Exception bad_exception definiert.<exception> stellt einige Funktionen bereit, die das Handling von terminate und unexpected vereinfachen. Außerdem wird in <exception> die Exception bad_exception definiert.

    6. Vorlesung: "Fortgeschrittene C++-Programmierung" 6 1. Language Support Library 1.7 Other runtime support <cstdarg> Zugriff auf ellipsis (...) –Argumente <csetjmp> Unterstützung für Sprünge zwischen Funktionen <csignal> einfaches Handling von Signalen (Error, usw.) während der Programmausführung. <cstdlib> Diverse Funktionen: - Start and termination - malloc, free (Speicher Allokation) - atoi, strtoul (Umwandlung Strings in Zahlen) - rand, srand (Zufallszahlen) - abs (einfache mathematische Funktionen) - qsort (Sortierfunktion) Diese Header sind zumeist nur aufgrund der Kompatibilität zu C mit in den Standard aufgenommen worden. Für viele Funktionalitäten gibt es für C++-Programmierer bessere Alternativen in anderen Teilen der Bibliothek. Insbesondere von der Verwendung von <csetjmp> - Funktionen ist bei C++ eher abzuraten, da diese Funktionen die C++-Objekt-Semantik nicht berücksichtigen (Stichwort: Aufruf von D‘toren).Diese Header sind zumeist nur aufgrund der Kompatibilität zu C mit in den Standard aufgenommen worden. Für viele Funktionalitäten gibt es für C++-Programmierer bessere Alternativen in anderen Teilen der Bibliothek. Insbesondere von der Verwendung von <csetjmp> - Funktionen ist bei C++ eher abzuraten, da diese Funktionen die C++-Objekt-Semantik nicht berücksichtigen (Stichwort: Aufruf von D‘toren).

    7. Vorlesung: "Fortgeschrittene C++-Programmierung" 7 1. Language Support Library #include <iostream> #include <limits> #include <string> using namespace std; int main(){ // use textual repr. for bool cout << boolalpha; // print maximum of integral types cout << "max(short): "  << numeric_limits<short>::max() << endl;   cout << "max(int):   "  << numeric_limits<int>::max() << endl;   

    8. Vorlesung: "Fortgeschrittene C++-Programmierung" 8 1. Language Support Library cout << "max(long double): „      << numeric_limits<long double>::max()  << endl;    // print whether char is signed    cout << "is_signed(char): "         << numeric_limits<char>::is_signed  << endl; }

    9. Vorlesung: "Fortgeschrittene C++-Programmierung" 9 2. Diagnostic Library 2.1 Exception classes <stdexcept> definiert standard exception classes wie length_error oder invalid_argument 2.2 Assertions <cassert> definiert assert() 2.3 Error numbers <cerrno> definiert einfache Errorhandling Funktionalität Wenn das Argument von assert() 0 ist, so wird das Programm abgebrochen, es sei denn, das Präprozessor-Macro NDEBUG („no debug“) definiert ist, macht assert() gar nichts. Bei <cassert> und <cerrno> handelt es sich wiederum um eher „altmodische“ Bibliotheksteile.Wenn das Argument von assert() 0 ist, so wird das Programm abgebrochen, es sei denn, das Präprozessor-Macro NDEBUG („no debug“) definiert ist, macht assert() gar nichts. Bei <cassert> und <cerrno> handelt es sich wiederum um eher „altmodische“ Bibliotheksteile.

    10. Vorlesung: "Fortgeschrittene C++-Programmierung" 10 2. Diagnostic Library #include <bitset> #include <iostream> using namespace std; int main( ) { try { bitset< 32 > bitset( string( "11001010101100001b10010101011000"));} catch ( exception &e ) { cerr << "Caught " << e.what( )<< endl; cerr << "Type " << typeid(e).name( ) << endl; }; }

    11. Vorlesung: "Fortgeschrittene C++-Programmierung" 11 3. General Utilities Library 3.1 Utility components <utility> Grundfunktionalität für die STL, definiert Klasse pair<T1, T2> 3.2 Function objects <functional> Definiert Funktionsobjekte, die u.A. von den STL-Algorithmen verwendet werden. („function object“ = Objekt, das operator() überlädt.) Mit STL („standard template library“) bezeichnet man einen gewissen stark templatisierten Teil der Standard-Library (beziehungsweise dessen eigenständigen Vorläufer). Zur STL gehören z.B. <functional>, die String und die Container-Klassen, die Iteratoren und die Algorithmen. Über die STL werden wir uns in der nächsten Sitzung eingehender unterhalten.Mit STL („standard template library“) bezeichnet man einen gewissen stark templatisierten Teil der Standard-Library (beziehungsweise dessen eigenständigen Vorläufer). Zur STL gehören z.B. <functional>, die String und die Container-Klassen, die Iteratoren und die Algorithmen. Über die STL werden wir uns in der nächsten Sitzung eingehender unterhalten.

    12. Vorlesung: "Fortgeschrittene C++-Programmierung" 12 3. General Utilities Library 3.3 Memory <memory> Heap- Speicherverwaltung: - default allocator – Klasse. - temporary buffers. - Funktionen für „rohen“ Speicherzugriff. - auto_ptr – Klasse. <cstdlib> malloc, free (Speicher-Allokation unter C) <cstring> Schnelle Speicherfunktionen: memset, memcpy, memcmp, ... 3.4 Date and Time <ctime> Datums- und Zeitfunktionen Die Funktionen memset und memcpy, usw. sind in vielen Fällen optimiert für das betreffende System/den Prozessor, und darum oft deutlich schneller, als einfache Schleifen.Die Funktionen memset und memcpy, usw. sind in vielen Fällen optimiert für das betreffende System/den Prozessor, und darum oft deutlich schneller, als einfache Schleifen.

    13. Vorlesung: "Fortgeschrittene C++-Programmierung" 13 3. General Utilities Library #include <iostream> #include <vector> #include <string> #include <algorithm> #include <functional> class Person {   private:     std::string name;   public:     //...     void print () const {         std::cout << name << std::endl;     }     void printWithPrefix (std::string prefix) const {         std::cout << prefix << name << std::endl;     } };

    14. Vorlesung: "Fortgeschrittene C++-Programmierung" 14 3. General Utilities Library void foo (const std::vector<Person>& coll){ using std::for_each; using std::bind2nd; using std::mem_fun_ref; // call print() for each element for_each (coll.begin(), coll.end(),         mem_fun_ref(&Person::print)); // call member func. printWithPrefix() for each element //"person: " is passed as an arg.  // to the mem. Function for_each (coll.begin(), coll.end(),bind2nd(mem_fun_re f(&Person::printWithPrefix),"person: ")); }

    15. Vorlesung: "Fortgeschrittene C++-Programmierung" 15 4. String Library 4.1 String Classes <string> Allgemeine String-Klasse string (basiert auf basic_string - Template-Klasse) 4.1 Null-terminated sequence utilities <cctype> <cwctype> Zahlreiche Funktionen zur Manipulation <cstring> von Null-terminierten char arrays und <cwchar> wchar_t arrays. <cstdlib> Einige Funktionen aus den Null-terminated sequence utilities sind deswegen problematisch, weil sie keine Länder- und Sprachenspezifischen Besonderheiten berücksichtigen. Die Funktion tolower aus <cctype> zur Konversion eines char zum Kleinbuchstaben übersetzt Ä nicht zu ä, da Ä nicht als Buchstabe erkannt wird.Einige Funktionen aus den Null-terminated sequence utilities sind deswegen problematisch, weil sie keine Länder- und Sprachenspezifischen Besonderheiten berücksichtigen. Die Funktion tolower aus <cctype> zur Konversion eines char zum Kleinbuchstaben übersetzt Ä nicht zu ä, da Ä nicht als Buchstabe erkannt wird.

    16. Vorlesung: "Fortgeschrittene C++-Programmierung" 16 4. String Library #include <iostream> #include <string> using namespace std; int main (int argc, char** argv){ const string delims(" \t,.;"); string line;   // for every line read successfully while (getline(cin,line)) {    string::size_type begIdx, endIdx;   // search beginning of the first word   begIdx = line.find_first_not_of(delims);

    17. Vorlesung: "Fortgeschrittene C++-Programmierung" 17 4. String Library   // while beginning of a word found  while (begIdx != string::npos) {  // search end of the actual word  endIdx = line.find_first_of (delims, begIdx);  if (endIdx == string::npos) {    // end of word is end of line    endIdx = line.length();  } // print characters in reverse order for(int i=endIdx-1; i>=static_cast<int>(begIdx); --i) { cout << line[i]; } // search beginning of the next word begIdx = line.find_first_not_of (delims, endIdx); }

    18. Vorlesung: "Fortgeschrittene C++-Programmierung" 18 4. String Library Assign give a string values from strings of characters and other C++ strings At returns an element at a specific location Begin returns an iterator to the beginning of the string c_str returns a standard C character array version of the string Capacity returns the number of elements that the string can hold Clear removes all elements from the string Compare compares two strings Copy copies characters from a string into an array Data returns a pointer to the first character of a string Empty true if the string has no elements End returns an iterator just past the last element of a string

    19. Vorlesung: "Fortgeschrittene C++-Programmierung" 19 4. String Library find_first_not_of find first absence of characters find_first_of find first occurrence of characters find_last_not_of find last absence of characters find_last_of find last occurrence of characters Getline read data from an I/O stream into a string Insert insert characters into a string Length returns the length of the string max_size returns the maximum number of elements that the string can hold push_back add an element to the end of the string

    20. Vorlesung: "Fortgeschrittene C++-Programmierung" 20 4. String Library Rbegin returns a reverse_iterator to the end of the string Rend returns a reverse_iterator to the beginning of the string Replace replace characters in the string Reserve sets the minimum capacity of the string Resize change the size of the string Rfind find the last occurrence of a substring Size returns the number of items in the string Substr returns a certain substring Swap swap the contents of this string with another

    21. Vorlesung: "Fortgeschrittene C++-Programmierung" 21 5. Localization Library 5.1 Localization <locale> <clocale>

    22. Vorlesung: "Fortgeschrittene C++-Programmierung" 22 6. Containers Library 6.1 Sequences <vector> vector: Verallgemeinertes Array <deque> deque: Vektor, der an beiden Enden schnell verlängert oder verkürzt werden kann. <list> list: Liste 6.2 Associative containers <map> Menge von (key, value)-Paaren: map: key kann höchstens einmal vorkommen, multimap: key kann mehrfach vorkommen. <set> set: Menge, multiset: Menge, in der Elemente mehrfach vorkommen können. Bei vector und deque gibt es die Möglichkeit des random access, d.h. es kann auf Elemente an jeder Position in konstanter Zeit zugegriffen werden. Dies geht bei list nicht: Die Elemente der Liste müssen nacheinander durchlaufen werden. Für vector<bool> existiert eine Optimierung, bei der die einzelnen Elemente nur ein Bit benötigen. Vorsicht: vector<bool> genügt nicht allen Anforderungen an einen STL-Container. [Siehe Meyers, „Effective STL“, Item 18] map wird gewöhnlich als Baum implementiert. Das ist für viele Anwendungen nicht ideal; eine oftmals günstigere Klasse hash_map zwar weit verbreitet, gehört jedoch (noch) nicht zum Standard. Anmerkung: Der Standard verbietet die Verwendung von Containern aus auto_ptr-Objekten. Der Grund ist, dass wenn ein auto_ptr a in einen auto_ptr b kopiert wird, a seinen Buffer an b delegiert. Damit verliert a seine Aufgabe. Verschiedene STL-Algorithmen verlangen jedoch, dass ein Objekt auch dann weiter verwendbar bleibt, wenn man von ihm eine Kopie anlegt.Bei vector und deque gibt es die Möglichkeit des random access, d.h. es kann auf Elemente an jeder Position in konstanter Zeit zugegriffen werden. Dies geht bei list nicht: Die Elemente der Liste müssen nacheinander durchlaufen werden. Für vector<bool> existiert eine Optimierung, bei der die einzelnen Elemente nur ein Bit benötigen. Vorsicht: vector<bool> genügt nicht allen Anforderungen an einen STL-Container. [Siehe Meyers, „Effective STL“, Item 18] map wird gewöhnlich als Baum implementiert. Das ist für viele Anwendungen nicht ideal; eine oftmals günstigere Klasse hash_map zwar weit verbreitet, gehört jedoch (noch) nicht zum Standard. Anmerkung: Der Standard verbietet die Verwendung von Containern aus auto_ptr-Objekten. Der Grund ist, dass wenn ein auto_ptr a in einen auto_ptr b kopiert wird, a seinen Buffer an b delegiert. Damit verliert a seine Aufgabe. Verschiedene STL-Algorithmen verlangen jedoch, dass ein Objekt auch dann weiter verwendbar bleibt, wenn man von ihm eine Kopie anlegt.

    23. Vorlesung: "Fortgeschrittene C++-Programmierung" 23 6. Containers Library 6.3 Container adaptors Adaptoren nehmen einen Container und ergänzen ihn um ein neues Interface. <queue> queue: „fifo“-Schlange priority_queue: queue, bei der das größte Element bzgl. einer Sortierung extrahiert wird <stack> stack: „lifo“-Stapel 6.4 Bit set <bitset> bitset: Sequenz einer festen Anzahl von Bits. Ein „Adaptor“ ist eine (Template-) Klasse, die das Interface einer Klasse anpasst. Beispiel: Eine queue ist entweder eine deque oder eine liste, über die mit einem anderen Interface (eben dem queue-Interface) zugegriffen wird.Ein „Adaptor“ ist eine (Template-) Klasse, die das Interface einer Klasse anpasst. Beispiel: Eine queue ist entweder eine deque oder eine liste, über die mit einem anderen Interface (eben dem queue-Interface) zugegriffen wird.

    24. Vorlesung: "Fortgeschrittene C++-Programmierung" 24 6. Containers Library #include <iostream> #include <queue> using namespace std; int main() {     priority_queue<float> q;     // insert three elements into the priority queue     q.push(66.6);   q.push(22.2);   q.push(44.4);     // read and print two elements     cout << q.top() << ' ';  q.pop();     cout << q.top() << endl; q.pop();     // insert three more elements     q.push(11.1); q.push(55.5); q.push(33.3);     // skip one element     q.pop();     // pop and print remaining elements     while (!q.empty()) {         cout << q.top() << ' ';         q.pop();     } }

    25. Vorlesung: "Fortgeschrittene C++-Programmierung" 25 7. Iterators Library 7.1 Iteratoren Iteratoren werden von Algorithmen dazu verwendet, durch Container zu traversieren. <iterator> 1. Hilfsklassen (iterator_traits) 2. Basic iterator –Klasse 3. Iterator-Adaptoren: reverse_iterator 4. Insert-Iteratoren: back_inserter_iterator, front_inserter_iterator Erzeugung von Insert-Iteratoren: back_inserter(), front_inserter() 5. Stream-Iteratoren: istream_iterator, ostream_iterator Die Klasse iterator kann als Basis-Klasse für andere Iterator-Klassen dienen. Mit reverse_iterator wird ein gegebener Iterator „umgedreht“: ++ auf dem reverse_iterator führt -- auf dem ursprünglichen Iterator aus (und umgekehrt). Mit Insert-Iteratoren kann ein Container über einen Iterator nach Bedarf vergrößert werden (was mit normalen Iteratoren nicht geht, da der normale Iterator seinen Container nicht kennt). Stream-Iteratoren machen es möglich, Algorithmen gemeinsam mit IO-Streams zu verwenden (siehe unten).Die Klasse iterator kann als Basis-Klasse für andere Iterator-Klassen dienen. Mit reverse_iterator wird ein gegebener Iterator „umgedreht“: ++ auf dem reverse_iterator führt -- auf dem ursprünglichen Iterator aus (und umgekehrt). Mit Insert-Iteratoren kann ein Container über einen Iterator nach Bedarf vergrößert werden (was mit normalen Iteratoren nicht geht, da der normale Iterator seinen Container nicht kennt). Stream-Iteratoren machen es möglich, Algorithmen gemeinsam mit IO-Streams zu verwenden (siehe unten).

    26. Vorlesung: "Fortgeschrittene C++-Programmierung" 26 7. Iterators Library int main(){ deque<int> coll; // insert elements from 1 to 9 for (int i=1; i<=9; ++i) {    coll.push_back(i); } // find position of element with value 2 deque<int>::iterator pos1; pos1 = find (coll.begin(), coll.end(),    // range              2);                          // value // find position of element with value 7 deque<int>::iterator pos2; pos2 = find (coll.begin(), coll.end(),    // range              7);                          // value

    27. Vorlesung: "Fortgeschrittene C++-Programmierung" 27 7. Iterators Library  // print all elements in range [pos1,pos2) for_each (pos1, pos2,     // range         print);         // operation  // convert iterators to reverse iterators  deque<int>::reverse_iterator rpos1(pos1); deque<int>::reverse_iterator rpos2(pos2);  // print elem. in [pos1,pos2) in rev. Order for_each (rpos2, rpos1,   // range          print);         // operation

    28. Vorlesung: "Fortgeschrittene C++-Programmierung" 28 8. Algorithms Library 8.1 STL-Algorithmen STL-Algorithmen arbeiten auf Containern vermittels Iteratoren (und eventuell unter Benutzung von Funktionsobjekten). <algorithm> Enthält c.a. 70 Algorithmen für die verschiedensten Zwecke 8.2 C-Library Algorithmen <stdlib> Enthält z.B. qsort

    29. Vorlesung: "Fortgeschrittene C++-Programmierung" 29 8. Algorithms Library     deque<int> coll1;  vector<int> coll6(6);      // initialize with 6 elements  vector<int> coll30(30);    // initialize with 30 elements     INSERT_ELEMENTS(coll1,3,7);INSERT_ELEMENTS(coll1,2,6);  INSERT_ELEMENTS(coll1,1,5);  // copy elements of coll1 sorted into coll6  vector<int>::iterator pos6;  pos6 = partial_sort_copy (coll1.begin(), coll1.end(),                               coll6.begin(), coll6.end());  // print all copied elements  copy (coll6.begin(), pos6,        ostream_iterator<int>(cout," "))  // copy elements of coll1 sorted into coll30  vector<int>::iterator pos30;  pos30 = partial_sort_copy (coll1.begin(), coll1.end(),                             coll30.begin(), coll30.end(),                             greater<int>());  // print all copied elements  copy (coll30.begin(), pos30,        ostream_iterator<int>(cout," "));    

    30. Vorlesung: "Fortgeschrittene C++-Programmierung" 30 9. Numerics Library 9.1 Complex Numbers <complex> complex: Klasse für komplexe Zahlen. 9.2 Numeric Arrays <valarray> valarray: Array von Zahlen, Operationen erfolgen elementweise. (Weitere Klassen zu numeric arrays) 9.3 Generalized numeric operations <numeric> Enthält vier einfache numerische Algorithmen. (z.B. inner_product) <vararray> Enthält z.B. die Template-Klassen slice_array und gslice_array für array slices (eine gewisse Art von Bereichen innerhalb von Arrays).<vararray> Enthält z.B. die Template-Klassen slice_array und gslice_array für array slices (eine gewisse Art von Bereichen innerhalb von Arrays).

    31. Vorlesung: "Fortgeschrittene C++-Programmierung" 31 9. Numerics Library 9.4 C Library (Numerics) <math> Enthält grundlegende mathematische Funktionen, z.B. sin, cos, log, exp, sqrt <cstdlib> rand, srand: Zufallszahlen abs, ...: mathematische Funktionen

    32. Vorlesung: "Fortgeschrittene C++-Programmierung" 32 9. Numerics Library int main() {   /* valarray with 12 elements    * - four rows    * - three columns    */   valarray<double> va(12);   // fill valarray with values  for (int i=0; i<12; i++) {       va[i] = i;   }   printValarray (va, 3);   // assign 77 to all values that are less than 5   va[va<5.0] = 77.0;  // add 100 to all values that are greater than 5 and less than 9   va[va>5.0 && va<9.0]       = valarray<double>(va[va>5.0 && va<9.0]) + 100.0;   printValarray (va, 3); }

    33. Vorlesung: "Fortgeschrittene C++-Programmierung" 33 10. Input/Output Library 10.1 Input/Output streams <iostream> Definiert standard iostream Objekte: cin, cout, cerr, wcin, wcout, wcerr <iosfwd> (Forward declarations) <ios> Basisklassen für Iostreams, Definiert Manipulatoren: hex, uppercase <istream> Definiert input Streams: basic_istream, operator >> <ostream> Definiert output Streams: basic_ostream, operator << <iomanip> Definiert standard Manipulatoren: flush, endl, ... Streams delegieren das tatsächliche Lesen und Schreiben der Daten an Stream Buffers (siehe unten).Streams delegieren das tatsächliche Lesen und Schreiben der Daten an Stream Buffers (siehe unten).

    34. Vorlesung: "Fortgeschrittene C++-Programmierung" 34 10. Input/Output Library 10.2 Stream buffers <streambuf> Definiert Stream Buffers. 10.3 String based streams <sstream> Streams für Strings. 10.4 File based streams <fstream> Streams für Dateien. Durch die Hinzunahme der SLT-String-Klasse basic_string sind einige der String-Stream-Klassen veraltet und werden nur noch aus Gründen der Kompatibilität weitergeführt (istrstream, ostrstream, strstream, strstreambuf). Dafür gibt es nun neuere String-Stream-Klassen, die mit basic_string arbeiten: basic_istringstream, basic_ostringstream, basic_stringstream, basic_stringbuf.Durch die Hinzunahme der SLT-String-Klasse basic_string sind einige der String-Stream-Klassen veraltet und werden nur noch aus Gründen der Kompatibilität weitergeführt (istrstream, ostrstream, strstream, strstreambuf). Dafür gibt es nun neuere String-Stream-Klassen, die mit basic_string arbeiten: basic_istringstream, basic_ostringstream, basic_stringstream, basic_stringbuf.

    35. Vorlesung: "Fortgeschrittene C++-Programmierung" 35 10. Input/Output Library Das Objektmodell für String Streams entspricht weitgehend dem hier gezeigten für File Streams (ersetze basic_ifstream durch basic_istringstream, ... basic_filebuf durch basic_stringbuf, ... usw.).Das Objektmodell für String Streams entspricht weitgehend dem hier gezeigten für File Streams (ersetze basic_ifstream durch basic_istringstream, ... basic_filebuf durch basic_stringbuf, ... usw.).

    36. Vorlesung: "Fortgeschrittene C++-Programmierung" 36 10. Input/Output Library 10.5 C-Library Streams <cstdio> Input/Output der C-Library: Definiert printf, scanf, fopen, ... <cwchar> u.A. Input/Output für wchars.

    37. Vorlesung: "Fortgeschrittene C++-Programmierung" 37 10. Input/Output Library #include <iostream> #include <fstream> using namespace std; int main(){ // open file ``example.dat'' for reading and writing filebuf buffer; ostream output(&buffer); istream input(&buffer); buffer.open ("example.dat", ios::in | ios::out | ios::trunc);   for (int i=1; i<=4; i++) {   // write one line  output << i << ". line" << endl;   // print all file contents   input.seekg(0);          // seek to the beginning   char c;   while (input.get(c)) {       cout.put(c);   }   input.clear();           // clear  eofbit and  failbit } }

More Related