Vorwort XI 1 C++-Programme kompilieren 1 1.1 GCC beschaffen

Werbung
Vorwort XI
1 C++-Programme kompilieren 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 110
1.26 Exportierte Templates verwenden 112
2 Code organisieren 117
2.1 Headerdateien nur einmal einbinden 119
2.2 Eine Instanz einer Variablen über mehrere Quelldateien hinweg verwenden 121
2.3 Die Zahl der #includes mit Hilfe vorgezogener Klassendeklarationen reduzieren 123
2.4 Namenskollisionen mit Hilfe von Namensräumen verhindern 125
2.5 Eine Inline-Datei einbinden 132
3 Zahlen 133
3.1 Einen String in einen numerischen Typ umwandeln 134
3.2 Zahlen in Strings umwandeln 136
3.3 Herausfinden, ob ein String eine gültige Zahl enthält 140
3.4 Fließkommazahlen innerhalb einer beschränkten Genauigkeit vergleichen 143
3.5 Einen String mit einer Zahl in wissenschaftlicher Notation parsen 145
3.6 Zahlen zwischen verschiedenen numerischen Typen konvertieren 147
3.7 Den größten und den kleinsten möglichen Wert eines numerischen Typs bestimmen 150
4 Strings und Text 153
4.1 Einen String mit Füllzeichen auffüllen 154
4.2 Einen String trimmen 156
4.3 Strings als Sequenz ablegen 162
4.4 Die Länge eines Strings ermitteln 166
4.5 Einen String umkehren 169
4.6 Einen String in Teilstrings aufspalten 170
4.7 Einen String in Tokens zerlegen 173
4.8 Eine Sequenz von Strings zu einem String vereinen 176
4.9 Suchen in Strings 178
4.10 Das n-te Vorkommen eines Teilstrings ermitteln 182
4.11 Einen Teilstring aus einem String entfernen 183
4.12 Alle Zeichen eines Strings in Klein- oder Großbuchstaben umwandeln 185
4.13 String-Vergleiche ohne Beachtung von Groß- und Kleinschreibung 188
4.14 Einen String ohne Beachtung von Groß- und Kleinschreibung durchsuchen 191
4.15 Tabulatoren und Leerzeichen in einer Textdateiineinander konvertieren 193
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
5 Datumswerte und Uhrzeiten 219
5.1 Das aktuelle Datum und die Uhrzeit ermitteln 220
5.2 Datum und Uhrzeit als String formatieren 222
5.3 Mit Datums- und Uhrzeitwerten rechnen 225
5.4 Zwischen Zeitzonen konvertieren 227
5.5 Die Tagesnummer in einem bestimmten Jahr ermitteln 228
5.6 Typen mit begrenztem Wertebereich definieren 230
6 Daten mit Containern verwalten 235
6.1 Vektoren statt Arrays verwenden 236
6.2 Vektoren effizient einsetzen 240
6.3 Einen Vektor kopieren 245
6.4 Zeiger in einem Vektor speichern 247
6.5 Objekte in einer Liste speichern 249
6.6 String auf andere Dinge abbilden 254
6.7 Gehashte Container nutzen 260
6.8 Objekte sortiert abspeichern 265
6.9 Container in Containern speichern 269
7 Algorithmen 272
7.1 Über einen Container iterieren 273
7.2 Objekte aus einem Container entfernen 280
7.3 Daten zufällig mischen 283
7.4 Bereiche vergleichen 285
7.5 Daten verschmelzen 289
7.6 Einen Bereich sortieren 292
7.7 Einen Bereich aufteilen 295
7.8 Mengenoperationen mit Sequenzen ausführen 297
7.9 Elemente in einer Sequenz transformieren 301
7.10 Schreiben Sie Ihren eigenen Algorithmus 303
7.11 Einen Bereich in einen Stream ausgeben 306
8 Klassen 310
8.1 Datenelemente einer Klasse initialisieren 311
8.2 Objekte mit einer Funktion erstellen (Fabrikmuster) 314
8.3 Mit Konstruktoren und Destruktoren Ressourcen verwalten (RAII) 316
8.4 Einem Container automatisch neue Klasseninstanzen hinzufügen 319
8.5 Sicherstellen, dass nur eine einzelne Version eines Datenelements existiert 321
8.6 Den Typ eines Objekts zur Laufzeit ermitteln 323
8.7 Bestimmen, ob die Klasse eines Objekts eine Unterklasse eines anderen Objekts ist 325
8.8 Jeder Instanz einer Klasse eine eindeutige Identifizierung geben 326
8.9 Eine Singleton-Klasse erstellen 329
8.10 Eine Schnittstelle mit einer abstrakten Basisklasse erstellen 331
8.11 Ein Klassen-Template schreiben 336
8.12 Ein Elementfunktions-Template schreiben 341
8.13 Die Inkrement- und Dekrementoperatoren überladen 344
8.14 Arithmetische und Zuweisungsoperatoren für einintuitives Verhalten einer Klasse überladen 347
8.15 Eine virtuelle Funktion der Superklasse aufrufen 354
9 Ausnahmen und Sicherheit 356
9.1 Eine Ausnahmeklasse erstellen 356
9.2 Einen Konstruktor ausnahmefest machen 361
9.3 Eine Initialisierungsliste ausnahmefest machen 364
9.4 Elementfunktionen ausnahmefest machen 368
9.5 Ein Objekt sicher kopieren 373
10 Streams und Dateien 378
10.1 Text bei der Ausgabe ausrichten 379
10.2 Gleitkommawerte formatieren 383
10.3 Schreiben Sie Ihre eigenen Stream-Manipulatoren 386
10.4 Eine Klasse in einen Stream schreiben können 391
10.5 Eine Klasse aus einem Stream lesen können 394
10.6 Informationen über eine Datei erhalten 396
10.7 Eine Datei kopieren 398
10.8 Eine Datei löschen oder umbenennen 402
10.9 Temporäre Dateinamen und Dateien erstellen 404
10.10 Ein Verzeichnis erstellen 406
10.11 Ein Verzeichnis löschen 408
10.12 Den Inhalt eines Verzeichnisses lesen 411
10.13 Die Dateierweiterung aus einem String extrahieren 413
10.14 Einen Dateinamen aus einem kompletten Pfad extrahieren 415
10.15 Den Pfad aus einem vollständigen Pfad mit Dateinamen ermitteln 416
10.16 Eine Dateierweiterung ersetzen 418
10.17 Zwei Pfade in einem einzelnen Pfad zusammenführen 419
11 Wissenschaft und Mathematik 423
11.1 Die Anzahl der Elemente in einem Container ermitteln 424
11.2 Den größten oder kleinsten Wert in einem Container finden 425
11.3 Die Summe und den Durchschnitt der Elemente in einem Container berechnen 429
11.4 Werte außerhalb eines bestimmten Bereichs ausfiltern 431
11.5 Varianz, Standardabweichung und andere statistische Funktionen berechnen 433
11.6 Zufallszahlen erzeugen 436
11.7 Einen Container mit Zufallszahlen initialisieren 438
11.8 Einen numerischen Vektor mit dynamischer Größe darstellen 440
11.9 Einen numerischen Vektor mit fester Größe darstellen 441
11.10 Ein Skalarprodukt berechnen 445
11.11 Die Norm eines Vektors berechnen 446
11.12 Den Abstand zwischen zwei Vektoren berechnen 447
11.13 Einen Stride-Iterator implementieren 449
11.14 Eine Matrix mit dynamischer Größe implementieren 452
11.15 Eine Matrix mit konstanter Größe implementieren 456
11.16 Matrizen multiplizieren 459
11.17 Die Fast-Fourier-Transformation berechnen 461
11.18 Mit Polar-Koordinaten arbeiten 463
11.19 Berechnungen mit Bitsets durchführen 465
11.20 Große Integer-Werte mit fester Länge darstellen 469
11.21 Zahlen mit festen Nachkommastellen implementieren 473
12 Multithreading 476
12.1 Einen Thread erstellen 477
12.2 Eine Ressource thread-sicher machen 481
12.3 Einen Thread von einem anderen aus benachrichtigen 489
12.4 Gemeinsam genutzte Ressourcen einmal initialisieren 493
12.5 Einer Thread-Funktion ein Argument übergeben 494
13 Internationalisierung 497
13.1 Einen Unicode-String im Quelltext eingeben 498
13.2 Zahlen lesen und schreiben 499
13.3 Datumswerte und Uhrzeiten lesen und schreiben 503
13.4 Währungsbeträge lesen und schreiben 509
13.5 Lokalisierte Strings sortieren 514
14 XML 516
14.1 Ein einfaches XML-Dokument parsen 517
14.2 Mit Xerces-Strings arbeiten 526
14.3 Ein komplexes XML-Dokument parsen 529
14.4 Ein XML-Dokument verändern 540
14.5 Ein XML-Dokument gegen eine DTD validieren 545
14.6 Ein XML-Dokument gegen ein Schema validieren 549
14.7 Ein XML-Dokument mit XSLT umwandeln 553
14.8 Einen XPath-Ausdruck auswerten 559
14.9 Eine Collection von Objekten mit XML speichern und laden 566
15 Verschiedenes 572
15.1 Funktionszeiger für Callbacks nutzen 572
15.2 Zeiger auf Elemente einer Klasse nutzen 574
15.3 Sicherstellen, dass eine Funktion ein Argument nicht verändert 577
15.4 Sicherstellen, dass eine Elementfunktion ihr Objekt nicht verändert 580
15.5 Einen Operator schreiben, der keine Elementfunktion ist 582
15.6 Eine Sequenz mit kommaseparierten Werten initialisieren 584
Index 587
Herunterladen