E N D
1. Vorlesung: "Fortgeschrittene C++-Programmierung" 25.09.2012 FortgeschritteneC++-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 boolcout << boolalpha;// print maximum of integral typescout << "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 adaptorsAdaptoren 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 9for (int i=1; i<=9; ++i) { coll.push_back(i);}// find position of element with value 2deque<int>::iterator pos1;pos1 = find (coll.begin(), coll.end(), // range 2); // value// find position of element with value 7deque<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 writingfilebuf 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}
}