C++ Kochbuch

Werbung
C++ Kochbuch
D. Ryan Stephens, Christopher Diggins,
Jonathan Turkanis & Jeff Cogswell
Deutsche Übersetzung von
Andreas Heck & Thomas Demmig
O'REILT
®
Beijing • Cambridge • Farnham • Köln • Paris • Sebastopol • Taipei • Tokyo
Inhalt
Vorwort
1 C++-Programme kompilieren
XI
1
1.1 GCC beschaffen und installieren
16
1.2 Ein einfaches »Hallo Welt«-Programm von der
Kommandozeile aus kompilieren
19
1.3 Eine statische Bibliothek von der Kommandozeile aus kompilieren
26
1.4 Eine dynamische Bibliothek von der Kommandozeile aus kompilieren . . . 27
1.5 Eine komplexe Anwendung von der Kommandozeile aus kompilieren . . . 36
1.6 Boost.Build installieren
42
1.7 Ein einfaches »Hallo Welt«-Programm mit Boost.Build kompilieren
44
1.8 Eine statische Bibliothek mit Boost.Build kompilieren
48
1.9 Eine dynamische Bibliothek mit Boost.Build kompilieren
50
1.10 Ein komplexes Programm mit Boost.Build kompilieren
51
1.11 Eine statische Bibliothek mit einer IDE kompilieren
55
1.12 Eine dynamische Bibliothek mit einer IDE kompilieren
59
1.13 Ein komplexes Programm mit einer IDE kompilieren
63
1.14 GNU make beschaffen
69
1.15 Ein einfaches »Hallo Welt«-Programm mit GNU make kompilieren
72
1.16 Eine statische Bibliothek mit GNU make kompilieren
80
1.17 Eine dynamische Bibliothek mit GNU make kompilieren
85
1.18 Ein komplexes Programm mit GNU make kompilieren
87
1.19 Ein Makro definieren
92
1.20 Einen Kommandozeilen-Parameter in einer IDE angeben
94
1.21 Einen Debug Build erstellen
95
1.22 Einen Release Build erstellen
99
1.23 Eine Version der Laufzeitbibliothek auswählen
102
1.24 Die strikte Einhaltung des C++-Standards erzwingen
106
1.25 Eine Quelldatei automatisch gegen eine bestimmte
Bibliothek linken lassen
1.26 Exportierte Templates verwenden
Code organisieren
2.1 Headerdateien nur einmal einbinden
2.2 Eine Instanz einer Variablen über mehrere
Quelldateien hinweg verwenden
2.3 Die Zahl der #includes mit Hilfe vorgezogener
Klassendeklarationen reduzieren
2.4 Namenskollisionen mit Hilfe von Namensräumen verhindern
2.5 Eine Inline-Datei einbinden
110
112
117
119
121
123
125
132
Zahlen
133
3.1
3.2
3.3
3.4
134
136
140
Einen String in einen numerischen Typ umwandeln
Zahlen in Strings umwandeln
Herausfinden, ob ein String eine gültige Zahl enthält
Fließkommazahlen innerhalb einer beschränkten
Genauigkeit vergleichen
3.5 Einen String mit einer Zahl in wissenschaftlicher Notation parsen
3.6 Zahlen zwischen verschiedenen numerischen Typen konvertieren
3.7 Den größten und den kleinsten möglichen Wert
eines numerischen Typs bestimmen
Strings und Text
4.1
4.2
4.3
4.4
4.5
4.6
4.7
4.8
4.9
4.10
4.11
4.12
4.13
4.14
143
145
147
150
153
Einen String mit Füllzeichen auffüllen
154
Einen String trimmen
156
Strings als Sequenz ablegen
162
Die Länge eines Strings ermitteln
166
Einen String umkehren
169
Einen String in Teilstrings aufspalten
170
Einen String in Tokens zerlegen
173
Eine Sequenz von Strings zu einem String vereinen
176
Suchen in Strings
178
Das n-te Vorkommen eines Teilstrings ermitteln
182
Einen Teilstring aus einem String entfernen
183
Alle Zeichen eines Strings in Klein-oder Großbuchstaben umwandeln ..185
String-Vergleiche ohne Beachtung von Groß- und Kleinschreibung
188
Einen String ohne Beachtung von Groß- und
Kleinschreibung durchsuchen
191
4.15 Tabulatoren,und Leerzeichen in einer Textdatei
ineinander konvertieren
193
VI
I Inhalt
4.16 Zeilen in einer Textdatei umbrechen
196
4.17 Die Anzahl der Zeichen, Wörter und Zeilen in einer
Textdatei ermitteln
198
4.18 Die Häufigkeit jedes in einer Textdatei vorkommenden Wortes zählen .. 201
4.19 Eine Textdatei mit Rändern versehen
204
4.20 Eine Textdatei links- oder rechtsbündig formatieren
207
4.21 Whitespace in Textdateien durch einzelne Leerzeichen ersetzen
210
4.22 Tippfehler in einem sich ändernden Text automatisch korrigieren
211
4.23 Eine Textdatei mit kommaseparierten Einträgen einlesen
214
4.24 Einen String mit Hilfe regulärer Ausdrücke in Tokens zerlegen
217
Datumswerte und Uhrzeiten
5.1
5.2
5.3
5.4
5.5
5.6
219
Das aktuelle Datum und die Uhrzeit ermitteln
Datum und Uhrzeit als String formatieren
Mit Datums- und Uhrzeitwerten rechnen
Zwischen Zeitzonen konvertieren
Die Tagesnummer in einem bestimmten Jahr ermitteln
Typen mit begrenztem Wertebereich definieren
220
222
225
227
228
230
Daten mit Containern verwalten
6.1
6.2
6.3
6.4
6.5
6.6
6.7
6.8
6.9
235
Vektoren statt Arrays verwenden
Vektoren effizient einsetzen
Einen Vektor kopieren
Zeiger in einem Vektor speichern
Objekte in einer Liste speichern
String auf andere Dinge abbilden
Gehashte Container nutzen
Objekte sortiert abspeichern
Container in Containern speichern
236
240
245
247
249
254
260
265
269
Algorithmen
7.1
7.2
7.3
7.4
7.5
7.6
7.7
7.8
7.9
7.10
7.11
272
Über einen Container iterieren
Objekte aus einem Container entfernen
Daten zufällig mischen
Bereiche vergleichen
*
Daten verschmelzen
Einen Bereich sortieren
Einen Bereich aufteilen
Mengenoperationen mit Sequenzen ausführen
Elemente in einer Sequenz transformieren
Schreiben Sie Ihren eigenen Algorithmus
Einen Bereich in einen Stream ausgeben
273
280
283
285
289
292
295
297
301
303
306
Inhalt
I VII
8
9
Klassen
8.1 Datenelemente einer Klasse initialisieren
8.2 Objekte mit einer Funktion erstellen (Fabrikmuster)
8.3 Mit Konstruktoren und Destruktoren Ressourcen verwalten (RAU)
8.4 Einem Container automatisch neue Klasseninstanzen hinzufügen
8.5 Sicherstellen, dass nur eine einzelne Version eines
Datenelements existiert
8.6 Den Typ eines Objekts zur Laufzeit ermitteln
8.7 Bestimmen, ob die Klasse eines Objekts eine
Unterklasse eines anderen Objekts ist
8.8 Jeder Instanz einer Klasse eine eindeutige Identifizierung geben
8.9 Eine Singleton-Klasse erstellen
8.10 Eine Schnittstelle mit einer abstrakten Basisklasse erstellen
8.11 Ein Klassen-Template schreiben
8.12 Ein Elementfunktions-Template schreiben
8.13 Die Inkrement- und Dekrementoperatoren überladen
8.14 Arithmetische und Zuweisungsoperatoren für ein
intuitives Verhalten einer Klasse überladen
8.15 Eine virtuelle Funktion der Superklasse aufrufen
310
311
314
316
319
Ausnahmen und Sicherheit
9.1 Eine Ausnahmeklasse erstellen
9.2 Einen Konstruktor ausnahmefest machen
9.3 Eine Initialisierungsliste ausnahmefest machen
9.4 Elementfunktionen ausnahmefest machen
9.5 Ein Objekt sicher kopieren
356
356
361
364
368
373
10 Streams und Dateien
10.1 Text bei der Ausgabe ausrichten
10.2 Gleitkommawerte formatieren
10.3 Schreiben Sie Ihre eigenen Stream-Manipulatoren
10.4 Eine Klasse in einen Stream schreiben können
10.5 Eine Klasse aus einem Stream lesen können
10.6 Informationen über eine Datei erhalten
10.7 Eine Datei kopieren
10.8 Eine Datei löschen oder umbenennen
10.9 Temporäre Dateinamen und Dateien erstellen
10.10 Ein Verzeichnis erstellen
10.11 Ein Verzeichnis löschen
10.12 Den Inhalt eines Verzeichnisses lesen
10.13 Die Dateierweiterung aus einem String extrahieren
10.14 Einen Dateinamen aus einem kompletten Pfad extrahieren
VIII
I Inhalt
321
323
325
326
329
331
336
341
344
347
354
378
379
383
386
391
394
396
-. . . 398
402
404
406
408
411
413
415
10.15 Den Pfad aus einem vollständigen Pfad mit Dateinamen ermitteln
10.16 Eine Dateierweiterung ersetzen
10.17 Zwei Pfade in einem einzelnen Pfad zusammenführen
416
418
419
11 Wissenschaft und Mathematik
423
11.1 Die Anzahl der Elemente in einem Container ermitteln
11.2 Den größten oder kleinsten Wert in einem Container finden
11.3 Die Summe und den Durchschnitt der Elemente in
einem Container berechnen
11.4 Werte außerhalb eines bestimmten Bereichs ausfiltern
11.5 Varianz, Standardabweichung und andere
statistische Funktionen berechnen
11.6 Zufallszahlen erzeugen
11.7 Einen Container mit Zufallszahlen initialisieren
11.8 Einen numerischen Vektor mit dynamischer Größe darstellen
11.9 Einen numerischen Vektor mit fester Größe darstellen
11.10 Ein Skalarprodukt berechnen
11.11 Die Norm eines Vektors berechnen
11.12 Den Abstand zwischen zwei Vektoren berechnen
11.13 Einen Stride-Iterator implementieren
11.14 Eine Matrix mit dynamischer Größe implementieren
11.15 Eine Matrix mit konstanter Größe implementieren
11.16 Matrizen multiplizieren
11.17 Die Fast-Fourier-Transformation berechnen
11.18 Mit Polar-Koordinaten arbeiten
11.19 Berechnungen mit Bitsets durchführen
11.20 Große Integer-Werte mit fester Länge darstellen
11.21 Zahlen mit festen Nachkommastellen implementieren
424
425
429
431
433
436
438
44Q
441
445
446
447
449
452
456
459
461
463
465
469
473
12 Multithreading
12.1
12.2
12.3
12.4
12.5
476
Einen Thread erstellen
Eine Ressource thread-sicher machen
Einen Thread von einem anderen aus benachrichtigen
Gemeinsam genutzte Ressourcen einmal initialisieren
Einer Thread-Funktion ein Argument übergeben
477
481
489
493
494
13 Internationalisierung
'
13.1
13.2
13.3
13.4
13.5
497
Einen Unicode-String im Quelltext eingeben
Zahlen lesen und schreiben
Datumswerte und Uhrzeiten lesen und schreiben
Währungsbeträge lesen und schreiben
Lokalisierte Strings sortieren
498
499
503
509
514
Inhalt
I IX
14 XML
14.1
14.2
14.3
14.4
14.5
14.6
14.7
14.8
14.9
Ein einfaches XML-Dokument parsen
Mit Xerces-Strings arbeiten
Ein komplexes XML-Dokument parsen
Ein XML-Dokument verändern
Ein XML-Dokument gegen eine DTD validieren
Ein XML-Dokument gegen ein Schema validieren
Ein XML-Dokument mit XSLT umwandeln
Einen XPath-Ausdruck auswerten
Eine Collection von Objekten mit XML speichern und laden
15 Verschiedenes
15.1
15.2
15.3
15.4
15.5
15.6
Index
Inhalt
Funktionszeiger für Callbacks nutzen
Zeiger auf Elemente einer Klasse nutzen
Sicherstellen, dass eine Funktion ein Argument nicht verändert
Sicherstellen, dass eine Elementfunktion ihr Objekt nicht verändert . . . .
Einen Operator schreiben, der keine Elementfunktion ist
Eine Sequenz mit kommaseparierten Werten initialisieren
516
517
526
529
540
545
549
553
559
566
572
572
574
577
580
582
584
587
Herunterladen