Stroustrup Die C++-Programmiersprache
1. Auflage 2015
ISBN: 978-3-446-43981-8
Verlag: Carl Hanser
Format: PDF
Kopierschutz: 1 - PDF Watermark
aktuell zum C++11-Standard
E-Book, Deutsch, 1467 Seiten
ISBN: 978-3-446-43981-8
Verlag: Carl Hanser
Format: PDF
Kopierschutz: 1 - PDF Watermark
- C++11 - zugänglich für Programmierer, die von C++98 oder anderen Sprachen kommen, wobei die vorgestellten Einblicke und Techniken selbst C++11-Spitzenprogrammierer unverzichtbar finden werden.
- Referenz und Tutorial für Programmierer, die C++ möglichst effektiv einsetzen möchten.
- Der neue C++11-Standard ermöglicht es Programmierern, Ideen klarer, einfacher und direkter auszudrücken sowie schnelleren und effizienteren Code zu schreiben.
Die C++-Programmiersprache ist eine akkurate, ausführlich erläuterte und ganzheitliche Darstellung der vollständigen Sprache - mit all ihren Instrumenten, Abstraktionsmechanismen, Standardbibliotheken und wichtigsten Entwurfstechniken. Stroustrup präsentiert das ganze Buch hindurch knappe, 'reine C++11-Beispiele', die sowohl den Einsatz der Sprachmittel als auch den Programmentwurf anschaulich darstellen. Zum umfassenden Verständnis gibt der Autor zahlreiche Querverweise auf andere Stellen im Buch sowie auf den ISO-Standard an.
Neuigkeiten im Rahmen von C++11 sind
- Unterstützung für Nebenläufigkeit,
- reguläre Ausdrücke, Ressourcenverwaltungszeiger, Zufallszahlen und verbesserte Container,
- Allgemeine und einheitliche Initialisierung, vereinfachte for-Anweisungen, Verschiebesemantik und Unicode-Unterstützung,
- Lambda-Ausdrücke, allgemeine konstante Ausdrücke, Kontrolle über Standardwerte von Klassen, variadische Templates, Template-Alias und benutzerdefinierte Literale,
- Kompatibilitätsfragen.
AUS DEM INHALT //
Elementare Sprachmittel: Typ, Objekt, Gültigkeitsbereich, Speicherung, arithmetische Grundlagen und weitere // Modularität, die durch Namespaces, Quelldateien und Ausnahmenbehandlung unterstützt wird // C++-Abstraktion einschließlich Klassen, Klassenhierarchien und Templates für eine Synthese von herkömmlicher, objektorientierter und generischer Programmierung // Standardbibliothek: Container, Algorithmen, Iteratoren, Utilities, Strings, Stream-E/A, Locales, Numerik und weitere // Das grundlegende C++-Speichermodell im Detail
Fachgebiete
Weitere Infos & Material
1;Inhalt;6
2;Vorwort;32
3;Teil I Einführung;36
3.1;1 Vorbemerkungen;38
3.1.1;1.1?Zum Aufbau dieses Buchs;38
3.1.1.1;1.1.1?Einführung;39
3.1.1.2;1.1.2?Grundlegende Sprachmittel;39
3.1.1.3;1.1.3?Abstraktionsmechanismen;40
3.1.1.4;1.1.4?Die Standardbibliothek;42
3.1.1.5;1.1.5?Beispiele und Referenzen;43
3.1.2;1.2?Der Entwurf von C++;45
3.1.2.1;1.2.1?Programmierstile;47
3.1.2.2;1.2.2?Typprüfung;50
3.1.2.3;1.2.3?C-Kompatibilität;51
3.1.2.4;1.2.4?Sprache, Bibliotheken und Systeme;52
3.1.3;1.3?C++ lernen;54
3.1.3.1;1.3.1?In C++ programmieren;56
3.1.3.2;1.3.2?Ratschläge für C++-Programmierer;57
3.1.3.3;1.3.3?Ratschläge für C-Programmierer;58
3.1.3.4;1.3.4?Ratschläge für Java-Programmierer;59
3.1.4;1.4?Historische Anmerkungen;60
3.1.4.1;1.4.1?Chronik;61
3.1.4.2;1.4.2?Die frühen Jahre;62
3.1.4.2.1;1.4.2.1?Sprachfeatures und Bibliotheksinstrumente;63
3.1.4.3;1.4.3?Der 1998-Standard;65
3.1.4.3.1;1.4.3.1?Sprachfeatures;65
3.1.4.3.2;1.4.3.2?Die Standardbibliothek;66
3.1.4.4;1.4.4?Der 2011-Standard;67
3.1.4.4.1;1.4.4.1?Sprachfeatures;68
3.1.4.4.2;1.4.4.2?Standardbibliothek;69
3.1.4.5;1.4.5?Wofür wird C++ verwendet?;70
3.1.5;1.5?Ratschläge;72
3.1.6;1.6?Literaturhinweise;73
3.2;2 Ein Rundreise durch C++: Die Grundlagen;78
3.2.1;2.1?Einführung;78
3.2.2;2.2?Die Grundlagen;79
3.2.2.1;2.2.1?Hello, World!;79
3.2.2.2;2.2.2?Typen, Variablen und Arithmetik;81
3.2.2.3;2.2.3?Konstanten;83
3.2.2.4;2.2.4?Tests und Schleifen;84
3.2.2.5;2.2.5?Zeiger, Arrays und Schleifen;86
3.2.3;2.3?Benutzerdefinierte Typen;88
3.2.3.1;2.3.1?Strukturen;88
3.2.3.2;2.3.2?Klassen;90
3.2.3.3;2.3.3?Aufzählungen;92
3.2.4;2.4?Modularität;93
3.2.4.1;2.4.1?Separate Kompilierung;94
3.2.4.2;2.4.2?Namespaces;95
3.2.4.3;2.4.3?Fehlerbehandlung;96
3.2.4.3.1;2.4.3.1?Ausnahmen;97
3.2.4.3.2;2.4.3.2?Invarianten;98
3.2.4.3.3;2.4.3.3?Statische Assertionen;99
3.2.5;2.5?Nachbemerkung;100
3.2.6;2.6?Ratschläge;100
3.3;3 Eine Rundreise durch C++: Abstraktionsmechanismen;102
3.3.1;3.1?Einführung;102
3.3.2;3.2?Klassen;103
3.3.2.1;3.2.1?Konkrete Typen;103
3.3.2.1.1;3.2.1.1?Ein arithmetischer Typ;104
3.3.2.1.2;3.2.1.2?Ein Container;106
3.3.2.1.3;3.2.1.3?Container initialisieren;107
3.3.2.2;3.2.2?Abstrakte Typen;108
3.3.2.3;3.2.3?Virtuelle Funktionen;111
3.3.2.4;3.2.4?Klassenhierarchien;112
3.3.3;3.3?Kopieren und verschieben;116
3.3.3.1;3.3.1?Container kopieren;116
3.3.3.2;3.3.2?Container verschieben;118
3.3.3.3;3.3.3?Ressourcenverwaltung;120
3.3.3.4;3.3.4?Operationen unterdrücken;121
3.3.4;3.4?Templates;122
3.3.4.1;3.4.1?Parametrisierte Typen;122
3.3.4.2;3.4.2?Funktions-Templates;123
3.3.4.3;3.4.3?Funktionsobjekte;124
3.3.4.4;3.4.4?Variadische Templates;127
3.3.4.5;3.4.5?Alias;128
3.3.5;3.5?Ratschläge;129
3.4;4 Eine Rundreise durch C++: Container und Algorithmen;130
3.4.1;4.1?Bibliotheken;130
3.4.1.1;4.1.1?Überblick über die Standardbibliothek;131
3.4.1.2;4.1.2?Header und Namespace der Standardbibliothek;132
3.4.2;4.2?Strings;133
3.4.3;4.3?Stream-Ein-/Ausgabe;135
3.4.3.1;4.3.1?Ausgabe;135
3.4.3.2;4.3.2?Eingabe;136
3.4.3.3;4.3.3?Ein-/Ausgabe von benutzerdefinierten Typen;137
3.4.4;4.4?Container;139
3.4.4.1;4.4.1?vector;139
3.4.4.1.1;4.4.1.1?Elemente;141
3.4.4.1.2;4.4.1.2?Bereichsüberprüfung;141
3.4.4.2;4.4.2?list;142
3.4.4.3;4.4.3?map;144
3.4.4.4;4.4.4?unordered_map;145
3.4.4.5;4.4.5?Überblick über Container;145
3.4.5;4.5?Algorithmen;147
3.4.5.1;4.5.1?Iteratoren verwenden;148
3.4.5.2;4.5.2?Iteratortypen;150
3.4.5.3;4.5.3?Stream-Iteratoren;151
3.4.5.4;4.5.4?Prädikate;153
3.4.5.5;4.5.5?Überblick über Algorithmen;153
3.4.5.6;4.5.6?Containeralgorithmen;154
3.4.6;4.6?Ratschläge;155
3.5;5 Eine Rundreise durch C++: Nebenläufigkeit und Dienstprogramme;156
3.5.1;5.1?Einführung;156
3.5.2;5.2?Ressourcenverwaltung;156
3.5.2.1;5.2.1?unique_ptr und shared_ptr;157
3.5.3;5.3?Nebenläufigkeit;159
3.5.3.1;5.3.1?Tasks und Threads;160
3.5.3.2;5.3.2?Argumente übergeben;161
3.5.3.3;5.3.3?Ergebnisse zurückgeben;162
3.5.3.4;5.3.4?Daten gemeinsam nutzen;162
3.5.3.4.1;5.3.4.1?Warten auf Ereignisse;164
3.5.3.5;5.3.5?Kommunizierende Tasks;165
3.5.3.5.1;5.3.5.1?future und promise;166
3.5.3.5.2;5.3.5.2?packaged_task;167
3.5.3.5.3;5.3.5.3?async();168
3.5.4;5.4?Kleine Hilfskomponenten;169
3.5.4.1;5.4.1?Zeit;169
3.5.4.2;5.4.2?Typfunktionen;170
3.5.4.2.1;5.4.2.1?iterator_traits;170
3.5.4.2.2;5.4.2.2?Typprädikate;172
3.5.4.3;5.4.3?pair und tuple;173
3.5.5;5.5?Reguläre Ausdrücke;174
3.5.6;5.6?Mathematik;175
3.5.6.1;5.6.1?Mathematische Funktionen und Algorithmen;175
3.5.6.2;5.6.2?Komplexe Zahlen;175
3.5.6.3;5.6.3?Zufallszahlen;176
3.5.6.4;5.6.4?Vektorarithmetik;178
3.5.6.5;5.6.5?Numerische Grenzen;179
3.5.7;5.7?Ratschläge;179
4;Teil II Grundlegende Sprachelemente;180
4.1;6 Typen und Deklarationen;182
4.1.1;6.1?Der ISO-C++-Standard;182
4.1.1.1;6.1.1?Implementierungen;184
4.1.1.2;6.1.2?Der grundlegende Quellzeichensatz;184
4.1.2;6.2?Typen;185
4.1.2.1;6.2.1?Fundamentale Typen;185
4.1.2.2;6.2.2?Boolesche Typen;186
4.1.2.3;6.2.3?Zeichentypen;188
4.1.2.3.1;6.2.3.1?Vorzeichenbehaftete und vorzeichenlose Zeichen;190
4.1.2.3.2;6.2.3.2?Zeichenliterale;191
4.1.2.4;6.2.4?Ganzzahltypen;193
4.1.2.4.1;6.2.4.1?Ganzzahlliterale;193
4.1.2.4.2;6.2.4.2?Typen von Ganzzahlliteralen;194
4.1.2.5;6.2.5?Gleitkommatypen;195
4.1.2.5.1;6.2.5.1?Gleitkommaliterale;195
4.1.2.6;6.2.6?Präfixe und Suffixe;196
4.1.2.7;6.2.7?void;197
4.1.2.8;6.2.8?Größen;197
4.1.2.9;6.2.9?Ausrichtung;200
4.1.3;6.3?Deklarationen;201
4.1.3.1;6.3.1?Die Struktur von Deklarationen;203
4.1.3.2;6.3.2?Mehrere Namen deklarieren;204
4.1.3.3;6.3.3?Namen;205
4.1.3.3.1;6.3.3.1?Schlüsselwörter;206
4.1.3.4;6.3.4?Gültigkeitsbereiche;207
4.1.3.5;6.3.5?Initialisierung;209
4.1.3.5.1;6.3.5.1?Fehlende Initialisierer;212
4.1.3.5.2;6.3.5.2?Initialisierungslisten;213
4.1.3.6;6.3.6?Einen Typ herleiten: auto und decltype();214
4.1.3.6.1;6.3.6.1?Der Typspezifizierer auto;214
4.1.3.6.2;6.3.6.2?auto und {}-Listen;215
4.1.3.6.3;6.3.6.3?Der Spezifizierer decltype();216
4.1.4;6.4?Objekte und Werte;217
4.1.4.1;6.4.1?L-Werte und R-Werte;217
4.1.4.2;6.4.2?Lebensdauer von Objekten;218
4.1.5;6.5?Typalias;219
4.1.6;6.6?Ratschläge;220
4.2;7 Zeiger, Arrays und Referenzen;222
4.2.1;7.1?Einführung;222
4.2.2;7.2?Zeiger;222
4.2.2.1;7.2.1?void*;223
4.2.2.2;7.2.2?nullptr;224
4.2.3;7.3?Arrays;225
4.2.3.1;7.3.1?Array-Initialisierer;226
4.2.3.2;7.3.2?Stringliterale;227
4.2.3.2.1;7.3.2.1?Rohe Zeichen-Strings;229
4.2.3.2.2;7.3.2.2?Größere Zeichensätze;230
4.2.4;7.4?Zeiger auf Arrays;231
4.2.4.1;7.4.1?Navigieren in Arrays;233
4.2.4.2;7.4.2?Mehrdimensionale Arrays;235
4.2.4.3;7.4.3?Arrays übergeben;236
4.2.5;7.5?Zeiger und const;238
4.2.6;7.6?Zeiger und Besitz;240
4.2.7;7.7?Referenzen;241
4.2.7.1;7.7.1?L-Wert-Referenzen;243
4.2.7.2;7.7.2?R-Wert-Referenzen;246
4.2.7.3;7.7.3?Referenzen auf Referenzen;249
4.2.7.4;7.7.4?Zeiger und Referenzen;250
4.2.8;7.8?Ratschläge;252
4.3;8 Strukturen, Unions und Aufzählungen;254
4.3.1;8.1?Einführung;254
4.3.2;8.2?Strukturen;254
4.3.2.1;8.2.1?Layout einer Struktur;256
4.3.2.2;8.2.2?Namen von Strukturen;257
4.3.2.3;8.2.3?Strukturen und Klassen;259
4.3.2.4;8.2.4?Strukturen und Arrays;260
4.3.2.5;8.2.5?Typäquivalenz;262
4.3.2.6;8.2.6?Plain Old Data;263
4.3.2.7;8.2.7?Felder;265
4.3.3;8.3?Unions;266
4.3.3.1;8.3.1?Unions und Klassen;268
4.3.3.2;8.3.2?Anonyme Unions;269
4.3.4;8.4?Aufzählungen;272
4.3.4.1;8.4.1?Aufzählungsklassen;272
4.3.4.2;8.4.2?Einfache Aufzählungen;276
4.3.4.3;8.4.3?Unbenannte Aufzählungen;278
4.3.5;8.5?Ratschläge;278
4.4;9 Anweisungen;280
4.4.1;9.1?Einführung;280
4.4.2;9.2?Zusammenfassung der Anweisungen;280
4.4.3;9.3?Deklarationen als Anweisungen;282
4.4.4;9.4?Auswahlanweisungen;283
4.4.4.1;9.4.1?if-Anweisungen;283
4.4.4.2;9.4.2?switch-Anweisungen;285
4.4.4.2.1;9.4.2.1?Deklarationen in case-Zweigen;287
4.4.4.3;9.4.3?Deklarationen in Bedingungen;287
4.4.5;9.5?Schleifenanweisungen;288
4.4.5.1;9.5.1?Bereichsbasierte for-Anweisungen;289
4.4.5.2;9.5.2?for-Anweisungen;290
4.4.5.3;9.5.3?while-Anweisungen;291
4.4.5.4;9.5.4?do-Anweisungen;292
4.4.5.5;9.5.5?Schleifen verlassen;292
4.4.6;9.6?goto-Anweisungen;293
4.4.7;9.7?Kommentare und Einrückungen;294
4.4.8;9.8?Ratschläge;296
4.5;10 Ausdrücke;298
4.5.1;10.1?Einführung;298
4.5.2;10.2?Ein Taschenrechner;298
4.5.2.1;10.2.1?Der Parser;299
4.5.2.2;10.2.2?Eingabe;303
4.5.2.3;10.2.3?Low-level-Eingabe;307
4.5.2.4;10.2.4?Fehlerbehandlung;309
4.5.2.5;10.2.5?Das Rahmenprogramm;309
4.5.2.6;10.2.6?Header;310
4.5.2.7;10.2.7?Befehlszeilenargumente;311
4.5.2.8;10.2.8?Eine Anmerkung zum Stil;312
4.5.3;10.3?Zusammenfassung der Operatoren;313
4.5.3.1;10.3.1?Ergebnisse;317
4.5.3.2;10.3.2?Reihenfolge der Auswertung;318
4.5.3.3;10.3.3?Operatorrangfolge;319
4.5.3.4;10.3.4?Temporäre Objekte;320
4.5.4;10.4?Konstante Ausdrücke;322
4.5.4.1;10.4.1?Symbolische Konstanten;324
4.5.4.2;10.4.2?const-Typen in konstanten Ausdrücken;325
4.5.4.3;10.4.3?Literale Typen;325
4.5.4.4;10.4.4?Referenzargumente;326
4.5.4.5;10.4.5?Adresse konstanter Ausdrücke;327
4.5.5;10.5?Implizite Typkonvertierung;327
4.5.5.1;10.5.1?Heraufstufungen;328
4.5.5.2;10.5.2?Konvertierungen;328
4.5.5.2.1;10.5.2.1?Integrale Konvertierungen;329
4.5.5.2.2;10.5.2.2?Gleitkommakonvertierungen;329
4.5.5.2.3;10.5.2.3?Zeiger- und Referenzkonvertierungen;330
4.5.5.2.4;10.5.2.4?Zeiger-auf-Member-Konvertierungen;330
4.5.5.2.5;10.5.2.5?Boolesche Konvertierungen;330
4.5.5.2.6;10.5.2.6?Gleitkomma-Ganzzahl-Konvertierungen;331
4.5.5.3;10.5.3?Übliche arithmetische Konvertierungen;332
4.5.6;10.6?Ratschläge;332
4.6;11 Auswahloperationen;334
4.6.1;11.1?Diverse Operatoren;334
4.6.1.1;11.1.1?Logische Operatoren;334
4.6.1.2;11.1.2?Bitweise logische Operatoren;334
4.6.1.3;11.1.3?Bedingte Ausdrücke;336
4.6.1.4;11.1.4?Inkrementieren und Dekrementieren;336
4.6.2;11.2?Freispeicher;338
4.6.2.1;11.2.1?Speicherverwaltung;340
4.6.2.2;11.2.2?Arrays;343
4.6.2.3;11.2.3?Speicherplatz beschaffen;344
4.6.2.4;11.2.4?Überladen von new;345
4.6.2.4.1;11.2.4.1?nothrow new;347
4.6.3;11.3?Listen;348
4.6.3.1;11.3.1?Implementierungsmodell;348
4.6.3.2;11.3.2?Qualifizierte Listen;350
4.6.3.3;11.3.3?Unqualifizierte Listen;350
4.6.4;11.4?Lambda-Ausdrücke;352
4.6.4.1;11.4.1?Implementierungsmodelle;353
4.6.4.2;11.4.2?Alternativen für Lambda-Ausdrücke;354
4.6.4.3;11.4.3?Erfassung;356
4.6.4.3.1;11.4.3.1?Lambda und Lebensdauer;358
4.6.4.3.2;11.4.3.2?Namen von Namespaces;359
4.6.4.3.3;11.4.3.3?Lambda und this;359
4.6.4.3.4;11.4.3.4?Veränderbare Lambda-Ausdrücke;359
4.6.4.4;11.4.4?Aufruf und Rückgabe;360
4.6.4.5;11.4.5?Der Typ eines Lambda-Ausdrucks;360
4.6.5;11.5?Explizite Typumwandlung;361
4.6.5.1;11.5.1?Konstruktion;363
4.6.5.2;11.5.2?Benannte Typumwandlungen;364
4.6.5.3;11.5.3?C-Typumwandlungen;366
4.6.5.4;11.5.4?Funktionale Typumwandlung;366
4.6.6;11.6?Ratschläge;367
4.7;12 Funktionen;368
4.7.1;12.1?Funktionsdeklarationen;368
4.7.1.1;12.1.1?Warum Funktionen?;369
4.7.1.2;12.1.2?Bestandteile einer Funktionsdeklaration;369
4.7.1.3;12.1.3?Funktionsdefinitionen;370
4.7.1.4;12.1.4?Werte zurückgeben;372
4.7.1.5;12.1.5?Inline-Funktionen;374
4.7.1.6;12.1.6?constexpr-Funktionen;375
4.7.1.6.1;12.1.6.1?constexpr und Referenzen;376
4.7.1.6.2;12.1.6.2?Bedingte Auswertung;377
4.7.1.7;12.1.7?[[noreturn]]-Funktionen;377
4.7.1.8;12.1.8?Lokale Variablen;378
4.7.2;12.2?Argumentübergabe;379
4.7.2.1;12.2.1?Referenzargumente;380
4.7.2.2;12.2.2?Array-Argumente;382
4.7.2.3;12.2.3?Listenargumente;384
4.7.2.4;12.2.4?Nicht angegebene Anzahl von Argumenten;385
4.7.2.5;12.2.5?Standardargumente;389
4.7.3;12.3?Überladene Funktionen;391
4.7.3.1;12.3.1?Automatische Auflösung von Überladungen;391
4.7.3.2;12.3.2?Überladen und Rückgabetyp;393
4.7.3.3;12.3.3?Überladen und Gültigkeitsbereiche;394
4.7.3.4;12.3.4?Auflösung für mehrere Argumente;395
4.7.3.5;12.3.5?Manuelle Auflösung von Überladungen;395
4.7.4;12.4?Vor- und Nachbedingungen;396
4.7.5;12.5?Zeiger auf Funktion;398
4.7.6;12.6?Makros;402
4.7.6.1;12.6.1?Bedingte Übersetzung;405
4.7.6.2;12.6.2?Vordefinierte Makros;406
4.7.6.3;12.6.3?Pragmas;407
4.7.7;12.7?Ratschläge;407
4.8;13 Ausnahmenbehandlung;410
4.8.1;13.1?Fehlerbehandlung;410
4.8.1.1;13.1.1?Ausnahmen;411
4.8.1.2;13.1.2?Herkömmliche Fehlerbehandlung;413
4.8.1.3;13.1.3?Durchhangeln;414
4.8.1.4;13.1.4?Alternative Ansichten von Ausnahmen;415
4.8.1.4.1;13.1.4.1?Asynchrone Ereignisse;415
4.8.1.4.2;13.1.4.2?Ausnahmen, die keine Fehler sind;415
4.8.1.5;13.1.5?Wann Sie keine Ausnahmen verwenden können;416
4.8.1.6;13.1.6?Hierarchische Fehlerbehandlung;417
4.8.1.7;13.1.7?Ausnahmen und Effizienz;419
4.8.2;13.2?Ausnahmegarantien;421
4.8.3;13.3?Ressourcenverwaltung;423
4.8.3.1;13.3.1?finally;426
4.8.4;13.4?Invarianten erzwingen;428
4.8.5;13.5?Ausnahmen auslösen und abfangen;433
4.8.5.1;13.5.1?Ausnahmen auslösen;433
4.8.5.1.1;13.5.1.1?noexcept-Funktionen;435
4.8.5.1.2;13.5.1.2?Der Operator noexcept;435
4.8.5.1.3;13.5.1.3?Ausnahmespezifikationen;436
4.8.5.2;13.5.2?Ausnahmen abfangen;437
4.8.5.2.1;13.5.2.1?Ausnahmen erneut auslösen;438
4.8.5.2.2;13.5.2.2?Jede Ausnahme abfangen;439
4.8.5.2.3;13.5.2.3?Mehrere Handler;440
4.8.5.2.4;13.5.2.4?try-Blöcke in Funktionen;440
4.8.5.2.5;13.5.2.5?Beendigung;442
4.8.5.3;13.5.3?Ausnahmen und Threads;444
4.8.6;13.6?Eine vector-Implementierung;445
4.8.6.1;13.6.1?Ein einfacher vector;445
4.8.6.2;13.6.2?Speicher explizit darstellen;449
4.8.6.3;13.6.3?Zuweisung;452
4.8.6.4;13.6.4?Größe ändern;454
4.8.6.4.1;13.6.4.1?reserve();455
4.8.6.4.2;13.6.4.2?resize();456
4.8.6.4.3;13.6.4.3?push_back();456
4.8.6.4.4;13.6.4.4?Abschließende Gedanken;457
4.8.7;13.7?Ratschläge;458
4.9;14 Namespaces;460
4.9.1;14.1?Kompositionsprobleme;460
4.9.2;14.2?Namespaces;461
4.9.2.1;14.2.1?Explizite Qualifizierung;463
4.9.2.2;14.2.2?using-Deklarationen;464
4.9.2.3;14.2.3?using-Direktiven;465
4.9.2.4;14.2.4?Argumentabhängige Namensauflösung;466
4.9.2.5;14.2.5?Namespaces sind offen;469
4.9.3;14.3?Modularisierung und Schnittstellen;470
4.9.3.1;14.3.1?Namespaces als Module;471
4.9.3.2;14.3.2?Implementierungen;473
4.9.3.3;14.3.3?Schnittstellen und Implementierungen;475
4.9.4;14.4?Komposition mit Namespaces;477
4.9.4.1;14.4.1?Komfort vs. Sicherheit;477
4.9.4.2;14.4.2?Namespace-Alias;478
4.9.4.3;14.4.3?Namespaces zusammensetzen;479
4.9.4.4;14.4.4?Komposition und Auswahl;480
4.9.4.5;14.4.5?Namespaces und Überladen;481
4.9.4.6;14.4.6?Versionsverwaltung;483
4.9.4.7;14.4.7?Verschachtelte Namespaces;485
4.9.4.8;14.4.8?Unbenannte Namespaces;486
4.9.4.9;14.4.9?C-Header;487
4.9.5;14.5?Ratschläge;488
4.10;15 Quelldateien und Programme;490
4.10.1;15.1?Separate Übersetzung;490
4.10.2;15.2?Binden;491
4.10.2.1;15.2.1?Dateilokale Namen;494
4.10.2.2;15.2.2?Header-Dateien;495
4.10.2.3;15.2.3?Die Eine-Definition-Regel;497
4.10.2.4;15.2.4?Header der Standardbibliothek;499
4.10.2.5;15.2.5?Binden mit Nicht-C++-Code;500
4.10.2.6;15.2.6?Binden und Zeiger auf Funktionen;502
4.10.3;15.3?Header-Dateien verwenden;503
4.10.3.1;15.3.1?Organisation mit einzelnem Header;503
4.10.3.2;15.3.2?Organisation mit mehreren Header-Dateien;507
4.10.3.2.1;15.3.2.1?Andere Taschenrechnermodule;510
4.10.3.2.2;15.3.2.2?Header verwenden;512
4.10.3.3;15.3.3?Include-Wächter;513
4.10.4;15.4?Programme;514
4.10.4.1;15.4.1?Initialisierung von nichtlokalen Variablen;514
4.10.4.2;15.4.2?Initialisierung und Nebenläufigkeit;515
4.10.4.3;15.4.3?Programmbeendigung;516
4.10.5;15.5?Ratschläge;518
5;Teil III Abstraktionsmechanismen;520
5.1;16 Klassen;522
5.1.1;16.1?Einführung;522
5.1.2;16.2?Grundlagen von Klassen;523
5.1.2.1;16.2.1?Member-Funktionen;524
5.1.2.2;16.2.2?Standardmäßiges Kopieren;525
5.1.2.3;16.2.3?Zugriffskontrolle;526
5.1.2.4;16.2.4?class und struct;527
5.1.2.5;16.2.5?Konstruktoren;529
5.1.2.6;16.2.6?Explizite Konstruktoren;531
5.1.2.7;16.2.7?Klasseninterne Initialisierer;533
5.1.2.8;16.2.8?Klasseninterne Funktionsdefinitionen;534
5.1.2.9;16.2.9?Veränderlichkeit;535
5.1.2.9.1;16.2.9.1?Konstante Member-Funktionen;535
5.1.2.9.2;16.2.9.2?Physische und logische Konstanz;536
5.1.2.9.3;16.2.9.3?mutable;537
5.1.2.9.4;16.2.9.4?Veränderlichkeit über Indirektion;537
5.1.2.10;16.2.10?Selbstreferenz;538
5.1.2.11;16.2.11?Member-Zugriff;540
5.1.2.12;16.2.12?Statische Member;541
5.1.2.13;16.2.13?Member-Typen;543
5.1.3;16.3?Konkrete Klassen;544
5.1.3.1;16.3.1?Member-Funktionen;547
5.1.3.2;16.3.2?Hilfsfunktionen;550
5.1.3.3;16.3.3?Überladene Operatoren;551
5.1.3.4;16.3.4?Der Stellenwert von konkreten Klassen;552
5.1.4;16.4?Ratschläge;553
5.2;17 Konstruieren, Aufräumen, Kopieren und Verschieben;556
5.2.1;17.1?Einführung;556
5.2.2;17.2?Konstruktoren und Destruktoren;558
5.2.2.1;17.2.1?Konstruktoren und Invarianten;559
5.2.2.2;17.2.2?Destruktoren und Ressourcen;560
5.2.2.3;17.2.3?Basis- und Member-Destruktoren;561
5.2.2.4;17.2.4?Konstruktoren und Destruktoren aufrufen;562
5.2.2.5;17.2.5?Virtuelle Destruktoren;563
5.2.3;17.3?Initialisierung von Klassenobjekten;564
5.2.3.1;17.3.1?Initialisierung ohne Konstruktoren;564
5.2.3.2;17.3.2?Initialisierung mithilfe von Konstruktoren;566
5.2.3.2.1;17.3.2.1?Initialisierung durch Konstruktoren;568
5.2.3.3;17.3.3?Standardkonstruktoren;569
5.2.3.4;17.3.4?Initialisierungslisten-Konstruktoren;571
5.2.3.4.1;17.3.4.1?Mehrdeutigkeiten bei Initialisierungslisten-Konstruktoren auflösen;572
5.2.3.4.2;17.3.4.2?Initialisierungslisten verwenden;573
5.2.3.4.3;17.3.4.3?Direkte und Kopierinitialisierung;574
5.2.4;17.4 Initialisierung von Membern und Basisklassen;576
5.2.4.1;17.4.1?Member-Initialisierung;576
5.2.4.1.1;17.4.1.1?Member-Initialisierung und -Zuweisung;577
5.2.4.2;17.4.2?Basisklassen-Initialisierer;578
5.2.4.3;17.4.3?Konstruktoren delegieren;578
5.2.4.4;17.4.4?Klasseninterne Initialisierer;579
5.2.4.5;17.4.5?Initialisierer statischer Member;581
5.2.5;17.5?Kopieren und verschieben;582
5.2.5.1;17.5.1?Kopieren;583
5.2.5.1.1;17.5.1.1?Vorsicht vor Standardkonstruktoren;585
5.2.5.1.2;17.5.1.2?Kopieren von Basisklassen;585
5.2.5.1.3;17.5.1.3?Was Kopieren bedeutet;586
5.2.5.1.4;17.5.1.4?Slicing;589
5.2.5.2;17.5.2?Verschieben;590
5.2.6;17.6?Standardoperationen generieren;594
5.2.6.1;17.6.1?Explizite Standardoperationen;595
5.2.6.2;17.6.2?Standardoperationen;596
5.2.6.3;17.6.3?Standardoperationen verwenden;597
5.2.6.3.1;17.6.3.1?Standardkonstruktoren;597
5.2.6.3.2;17.6.3.2?Invarianten bewahren;597
5.2.6.3.3;17.6.3.3?Ressourceninvarianten;598
5.2.6.3.4;17.6.3.4?Partiell spezifizierte Invarianten;599
5.2.6.4;17.6.4?Gelöschte Funktionen;601
5.2.7;17.7?Ratschläge;603
5.3;18 Überladen von Operatoren;606
5.3.1;18.1?Einführung;606
5.3.2;18.2?Operatorfunktionen;608
5.3.2.1;18.2.1?Binäre und unäre Operatoren;609
5.3.2.2;18.2.2?Vordefinierte Bedeutungen für Operatoren;610
5.3.2.3;18.2.3?Operatoren und benutzerdefinierte Typen;611
5.3.2.4;18.2.4?Objekte übergeben;611
5.3.2.5;18.2.5?Operatoren in Namespaces;613
5.3.3;18.3?Ein Typ für komplexe Zahlen;615
5.3.3.1;18.3.1?Member- und Nicht-Member-Operatoren;615
5.3.3.2;18.3.2?Arithmetik mit gemischten Datentypen;616
5.3.3.3;18.3.3?Konvertierungen;617
5.3.3.3.1;18.3.3.1?Konvertierung von Operanden;619
5.3.3.4;18.3.4?Literale;620
5.3.3.5;18.3.5?Zugriffsfunktionen;621
5.3.3.6;18.3.6?Hilfsfunktionen;622
5.3.4;18.4?Typumwandlung;623
5.3.4.1;18.4.1?Konvertierungsoperatoren;623
5.3.4.2;18.4.2?Explizite Konvertierungsoperatoren;625
5.3.4.3;18.4.3?Mehrdeutigkeiten;626
5.3.5;18.5?Ratschläge;628
5.4;19 Spezielle Operatoren;630
5.4.1;19.1?Einführung;630
5.4.2;19.2?Spezielle Operatoren;630
5.4.2.1;19.2.1?Indizierung;630
5.4.2.2;19.2.2?Funktionsaufruf;631
5.4.2.3;19.2.3?Dereferenzieren;633
5.4.2.4;19.2.4?Inkrementieren und Dekrementieren;635
5.4.2.5;19.2.5?Allokation und Deallokation;637
5.4.2.6;19.2.6?Benutzerdefinierte Literale;639
5.4.3;19.3?Eine String-Klasse;642
5.4.3.1;19.3.1?Wesentliche Operationen;643
5.4.3.2;19.3.2?Zugriff auf Zeichen;643
5.4.3.3;19.3.3?Darstellung;644
5.4.3.3.1;19.3.3.1?Ergänzende Funktionen;646
5.4.3.4;19.3.4?Member-Funktionen;647
5.4.3.5;19.3.5?Hilfsfunktionen;650
5.4.3.6;19.3.6?Unsere String-Klasse verwenden;652
5.4.4;19.4?Friends;652
5.4.4.1;19.4.1?Friends finden;654
5.4.4.2;19.4.2?Friends und Member;655
5.4.5;19.5?Ratschläge;657
5.5;20 Abgeleitete Klassen;660
5.5.1;20.1?Einführung;660
5.5.2;20.2?Abgeleitete Klassen;661
5.5.2.1;20.2.1?Member-Funktionen;664
5.5.2.2;20.2.2?Konstruktoren und Destruktoren;665
5.5.3;20.3?Klassenhierarchien;666
5.5.3.1;20.3.1?Typfelder;666
5.5.3.2;20.3.2?Virtuelle Funktionen;669
5.5.3.3;20.3.3?Explizite Qualifizierung;672
5.5.3.4;20.3.4?Überschreiben steuern;672
5.5.3.4.1;20.3.4.1?override;674
5.5.3.4.2;20.3.4.2?final;675
5.5.3.5;20.3.5?Member der Basisklasse verwenden;677
5.5.3.5.1;20.3.5.1?Konstruktoren vererben;678
5.5.3.6;20.3.6?Lockerung bei Rückgabetypen;680
5.5.4;20.4?Abstrakte Klassen;682
5.5.5;20.5?Zugriffskontrolle;684
5.5.5.1;20.5.1?Geschützte Member;688
5.5.5.1.1;20.5.1.1?Geschützte Member verwenden;689
5.5.5.2;20.5.2?Zugriff auf Basisklassen;689
5.5.5.2.1;20.5.2.1?Mehrfachvererbung und Zugriffskontrolle;690
5.5.5.3;20.5.3?using-Deklarationen und Zugriffskontrolle;691
5.5.6;20.6?Zeiger auf Member;692
5.5.6.1;20.6.1?Zeiger auf Funktions-Member;692
5.5.6.2;20.6.2?Zeiger auf Daten-Member;694
5.5.6.3;20.6.3?Basis- und abgeleitete Member;695
5.5.7;20.7?Ratschläge;696
5.6;21 Klassenhierarchien;698
5.6.1;21.1?Einführung;698
5.6.2;21.2?Klassenhierarchien entwerfen;698
5.6.2.1;21.2.1?Implementierungsvererbung;699
5.6.2.1.1;21.2.1.1?Kritische Betrachtungen;702
5.6.2.2;21.2.2?Schnittstellenvererbung;703
5.6.2.3;21.2.3?Alternative Implementierungen;705
5.6.2.3.1;21.2.3.1?Kritische Betrachtungen;708
5.6.2.4;21.2.4?Objekterstellung örtlich begrenzen;709
5.6.3;21.3?Mehrfachvererbung;710
5.6.3.1;21.3.1?Mehrfachschnittstellen;711
5.6.3.2;21.3.2?Mehrere Implementierungsklassen;711
5.6.3.3;21.3.3?Auflösung von Mehrdeutigkeiten;713
5.6.3.4;21.3.4?Eine Basisklasse wiederholt verwenden;717
5.6.3.5;21.3.5?Virtuelle Basisklassen;718
5.6.3.5.1;21.3.5.1?Virtuelle Basisklassen konstruieren;721
5.6.3.5.2;21.3.5.2?Member einer virtuellen Klasse nur einmal aufrufen;722
5.6.3.6;21.3.6?Replizierte und virtuelle Basisklassen;724
5.6.3.6.1;21.3.6.1?Funktionen virtueller Basisklassen überschreiben;726
5.6.4;21.4?Ratschläge;727
5.7;22 Laufzeit-Typinformationen;728
5.7.1;22.1?Einführung;728
5.7.2;22.2?Navigation in der Klassenhierarchie;728
5.7.2.1;22.2.1?dynamic_cast;730
5.7.2.1.1;22.2.1.1?dynamic_cast in Referenz;732
5.7.2.2;22.2.2?Mehrfachvererbung;733
5.7.2.3;22.2.3?static_cast und dynamic_cast;735
5.7.2.4;22.2.4?Eine Schnittstelle zurückgewinnen;736
5.7.3;22.3?Doppelte Bindung und Besucher;740
5.7.3.1;22.3.1?Doppelte Bindung;741
5.7.3.2;22.3.2?Besucher;743
5.7.4;22.4?Konstruktion und Destruktion;745
5.7.5;22.5?Typidentifizierung;746
5.7.5.1;22.5.1?Erweiterte Typinformationen;748
5.7.6;22.6?RTTI – richtig und falsch eingesetzt;749
5.7.7;22.7?Ratschläge;751
5.8;23 Templates;754
5.8.1;23.1?Einführung und Überblick;754
5.8.2;23.2?Ein einfaches String-Template;757
5.8.2.1;23.2.1?Ein Template definieren;759
5.8.2.2;23.2.2?Template-Instanziierung;760
5.8.3;23.3?Typprüfung;761
5.8.3.1;23.3.1?Typäquivalenz;763
5.8.3.2;23.3.2?Fehlererkennung;764
5.8.4;23.4?Member von Klassen-Templates;765
5.8.4.1;23.4.1?Daten-Member;765
5.8.4.2;23.4.2?Member-Funktionen;766
5.8.4.3;23.4.3?Member-Typalias;766
5.8.4.4;23.4.4?Statische Member;767
5.8.4.5;23.4.5?Member-Typen;767
5.8.4.6;23.4.6?Member-Templates;768
5.8.4.6.1;23.4.6.1?Templates und Konstruktoren;769
5.8.4.6.2;23.4.6.2?Templates und virtual;770
5.8.4.6.3;23.4.6.3?Verschachtelungen;770
5.8.4.7;23.4.7?Friends;773
5.8.5;23.5?Funktions-Templates;774
5.8.5.1;23.5.1?Argumente von Funktions-Templates;776
5.8.5.2;23.5.2?Funktions-Template-Argumente herleiten;777
5.8.5.2.1;23.5.2.1?Referenzherleitung;778
5.8.5.3;23.5.3?Überladen von Funktions-Templates;780
5.8.5.3.1;23.5.3.1?Mehrdeutigkeiten auflösen;781
5.8.5.3.2;23.5.3.2?Fehler bei Argumentersetzung;782
5.8.5.3.3;23.5.3.3?Überladen und Ableitung;784
5.8.5.3.4;23.5.3.4?Überladen und nicht hergeleitete Parameter;784
5.8.6;23.6?Template-Alias;785
5.8.7;23.7?Quellcodeorganisation;786
5.8.7.1;23.7.1?Binden;788
5.8.8;23.8?Ratschläge;789
5.9;24 Generische Programmierung;792
5.9.1;24.1?Einführung;792
5.9.2;24.2?Algorithmen und Lifting;793
5.9.3;24.3?Konzepte;797
5.9.3.1;24.3.1?Ein Konzept erkennen;798
5.9.3.2;24.3.2?Konzepte und Einschränkungen;801
5.9.4;24.4?Konzepte konkret machen;803
5.9.4.1;24.4.1?Axiome;807
5.9.4.2;24.4.2?Konzepte mit mehreren Argumenten;808
5.9.4.3;24.4.3?Wertkonzepte;810
5.9.4.4;24.4.4?Einschränkungsüberprüfungen;810
5.9.4.5;24.4.5?Überprüfung von Template-Definitionen;812
5.9.5;24.5?Ratschläge;814
5.10;25 Spezialisierung;816
5.10.1;25.1?Einführung;816
5.10.2;25.2?Template-Parameter und -Argumente;817
5.10.2.1;25.2.1?Typen als Argumente;817
5.10.2.2;25.2.2?Werte als Argumente;819
5.10.2.3;25.2.3?Operationen als Argumente;821
5.10.2.4;25.2.4?Templates als Argumente;823
5.10.2.5;25.2.5?Template-Standardargumente;824
5.10.2.5.1;25.2.5.1?Standardargumente bei Funktions-Templates;825
5.10.3;25.3?Spezialisierung;826
5.10.3.1;25.3.1?Schnittstellenspezialisierung;829
5.10.3.1.1;25.3.1.1?Implementierungsspezialisierung;830
5.10.3.2;25.3.2?Das primäre Template;830
5.10.3.3;25.3.3?Reihenfolge der Spezialisierung;832
5.10.3.4;25.3.4?Funktions-Template-Spezialisierung;833
5.10.3.4.1;25.3.4.1?Spezialisierung und Überladen;833
5.10.3.4.2;25.3.4.2?Spezialisierung, die kein Überladen ist;834
5.10.4;25.4?Ratschläge;835
5.11;26 Instanziierung;836
5.11.1;26.1?Einführung;836
5.11.2;26.2?Template-Instanziierung;837
5.11.2.1;26.2.1?Wann wird Instanziierung gebraucht?;838
5.11.2.2;26.2.2?Manuelle Kontrolle der Instanziierung;839
5.11.3;26.3?Namensbindung;840
5.11.3.1;26.3.1?Abhängige Namen;842
5.11.3.2;26.3.2?Bindung am Punkt der Definition;844
5.11.3.3;26.3.3?Bindung am Punkt der Instanziierung;845
5.11.3.4;26.3.4?Mehrere Punkte der Instanziierung;847
5.11.3.5;26.3.5?Templates und Namespaces;849
5.11.3.6;26.3.6?Zu aggressive ADL;850
5.11.3.7;26.3.7?Namen aus Basisklassen;852
5.11.4;26.4?Ratschläge;854
5.12;27 Templates und Hierarchien;856
5.12.1;27.1?Einführung;856
5.12.2;27.2?Parametrisierung und Hierarchie;857
5.12.2.1;27.2.1?Generierte Typen;859
5.12.2.2;27.2.2?Template-Konvertierungen;861
5.12.3;27.3?Hierarchien von Klassen-Templates;862
5.12.3.1;27.3.1?Templates als Schnittstellen;864
5.12.4;27.4?Template-Parameter als Basisklassen;864
5.12.4.1;27.4.1?Datenstrukturen zusammensetzen;865
5.12.4.2;27.4.2?Klassenhierarchien linearisieren;869
5.12.5;27.5?Ratschläge;874
5.13;28 Metaprogrammierung;876
5.13.1;28.1?Einführung;876
5.13.2;28.2?Typfunktionen;878
5.13.2.1;28.2.1?Typalias;881
5.13.2.1.1;28.2.1.1?Wann man keinen Alias verwendet;882
5.13.2.2;28.2.2?Typprädikate;883
5.13.2.3;28.2.3?Eine Funktion auswählen;885
5.13.2.4;28.2.4?Traits;885
5.13.3;28.3?Steuerungsstrukturen;887
5.13.3.1;28.3.1?Auswahl;887
5.13.3.1.1;28.3.1.1?Zwischen zwei Typen auswählen;888
5.13.3.1.2;28.3.1.2?Übersetzungszeit versus Laufzeit;888
5.13.3.1.3;28.3.1.3?Zwischen mehreren Typen auswählen;890
5.13.3.2;28.3.2?Iteration und Rekursion;891
5.13.3.2.1;28.3.2.1?Rekursion mit Klassen;892
5.13.3.3;28.3.3?Wann man Metaprogrammierung verwendet;892
5.13.4;28.4?Bedingte Definition: Enable_if;894
5.13.4.1;28.4.1?Enable_if verwenden;895
5.13.4.2;28.4.2?Enable_if implementieren;897
5.13.4.3;28.4.3?Enable_if und Konzepte;898
5.13.4.4;28.4.4?Weitere Beispiele mit Enable_if;898
5.13.5;28.5?Eine Liste zur Übersetzungszeit: Tuple;901
5.13.5.1;28.5.1?Eine einfache Ausgabefunktion;903
5.13.5.2;28.5.2?Elementzugriff;904
5.13.5.2.1;28.5.2.1?Konstante Tupel;906
5.13.5.3;28.5.3?make_tuple;907
5.13.6;28.6?Variadische Templates;908
5.13.6.1;28.6.1?Eine typsichere printf()-Funktion;908
5.13.6.2;28.6.2?Technische Details;911
5.13.6.3;28.6.3?Weiterleitung;913
5.13.6.4;28.6.4?Der Typ tuple der Standardbibliothek;914
5.13.7;28.7?Beispiel: SI-Einheiten;918
5.13.7.1;28.7.1?Einheiten;918
5.13.7.2;28.7.2?Größen;919
5.13.7.3;28.7.3?Literale für Einheiten;921
5.13.7.4;28.7.4?Hilfsfunktionen;923
5.13.8;28.8?Ratschläge;924
5.14;29 Ein Matrix-Design;926
5.14.1;29.1?Einführung;926
5.14.1.1;29.1.1?Einfache Anwendungen von Matrix;926
5.14.1.2;29.1.2?Anforderungen an Matrix;928
5.14.2;29.2?Ein Matrix-Template;929
5.14.2.1;29.2.1?Konstruktion und Zuweisung;931
5.14.2.2;29.2.2?Indizierung und Slicing;932
5.14.3;29.3?Arithmetische Matrix-Operationen;935
5.14.3.1;29.3.1?Skalaroperationen;936
5.14.3.2;29.3.2?Addition;936
5.14.3.3;29.3.3?Multiplikation;938
5.14.4;29.4?Matrix-Implementierung;940
5.14.4.1;29.4.1?slice();940
5.14.4.2;29.4.2?Matrix-Slices;940
5.14.4.3;29.4.3?Matrix_ref;942
5.14.4.4;29.4.4?Matrix-Listeninitialisierung;943
5.14.4.5;29.4.5?Matrix-Zugriff;945
5.14.4.6;29.4.6?Nulldimensionale Matrix;948
5.14.5;29.5?Lineare Gleichungen lösen;949
5.14.5.1;29.5.1?Das klassische gaußsche Eliminationsverfahren;950
5.14.5.2;29.5.2?Pivotisierung;951
5.14.5.3;29.5.3?Testen;952
5.14.5.4;29.5.4?Verschmolzene Operationen;953
5.14.6;29.6?Ratschläge;956
6;Teil IVDie Standardbibliothek;958
6.1;30 Überblick über die Standardbibliothek;960
6.1.1;30.1?Einführung;960
6.1.1.1;30.1.1?Komponenten der Standardbibliothek;961
6.1.1.2;30.1.2?Designeinschränkungen;962
6.1.1.3;30.1.3?Beschreibungsstil;964
6.1.2;30.2?Header;964
6.1.3;30.3?Sprachunterstützung;969
6.1.3.1;30.3.1?Unterstützung für Initialisierungslisten;969
6.1.3.2;30.3.2?Unterstützung für bereichsbasierte for-Anweisung;970
6.1.4;30.4?Fehlerbehandlung;970
6.1.4.1;30.4.1?Ausnahmen;971
6.1.4.1.1;30.4.1.1?Die Hierarchie der Standardausnahmen;972
6.1.4.1.2;30.4.1.2?Weiterleitung von Ausnahmen;973
6.1.4.1.3;30.4.1.3?terminate();976
6.1.4.2;30.4.2?Assertionen;976
6.1.4.3;30.4.3?system_error;977
6.1.4.3.1;30.4.3.1?Fehlercodes;978
6.1.4.3.2;30.4.3.2?Fehlerkategorien;980
6.1.4.3.3;30.4.3.3?system_error-Ausnahme;981
6.1.4.3.4;30.4.3.4?Potenziell portable Fehlerbedingungen;982
6.1.4.3.5;30.4.3.5?Fehlercodes zuordnen;982
6.1.4.3.6;30.4.3.6?errc-Fehlercodes;984
6.1.4.3.7;30.4.3.7?future_errc-Fehlercodes;987
6.1.4.3.8;30.4.3.8?io_errc-Fehlercodes;987
6.1.5;30.5?Ratschläge;987
6.2;31 STL-Container;990
6.2.1;31.1?Einführung;990
6.2.2;31.2?Überblick über Container;990
6.2.2.1;31.2.1?Containerdarstellung;993
6.2.2.2;31.2.2?Anforderungen an die Elemente;995
6.2.2.2.1;31.2.2.1?Vergleiche;996
6.2.2.2.2;31.2.2.2?Andere relationale Operatoren;997
6.2.3;31.3?Operatoren im Überblick;998
6.2.3.1;31.3.1?Member-Typen;1001
6.2.3.2;31.3.2?Konstruktoren, Destruktor und Zuweisungen;1002
6.2.3.3;31.3.3?Größe und Kapazität;1004
6.2.3.4;31.3.4?Iteratoren;1004
6.2.3.5;31.3.5?Elementzugriff;1006
6.2.3.6;31.3.6?Stack-Operationen;1006
6.2.3.7;31.3.7?Listenoperationen;1007
6.2.3.8;31.3.8?Andere Operationen;1008
6.2.4;31.4?Container;1009
6.2.4.1;31.4.1?vector;1009
6.2.4.1.1;31.4.1.1?vector und Wachstum;1009
6.2.4.1.2;31.4.1.2?vector und Verschachtelung;1011
6.2.4.1.3;31.4.1.3?vector und Arrays;1013
6.2.4.1.4;31.4.1.4?vector und string;1013
6.2.4.2;31.4.2?Listen;1014
6.2.4.3;31.4.3?Assoziative Container;1016
6.2.4.3.1;31.4.3.1?Geordnete assoziative Container;1017
6.2.4.3.2;31.4.3.2?Ungeordnete assoziative Container;1021
6.2.4.3.3;31.4.3.3?Ungeordnete Maps konstruieren;1022
6.2.4.3.4;31.4.3.4?Hash- und Gleichheitsfunktionen;1024
6.2.4.3.5;31.4.3.5?Lastfaktor und Buckets;1027
6.2.5;31.5?Containeradapter;1028
6.2.5.1;31.5.1?stack;1029
6.2.5.2;31.5.2?queue;1031
6.2.5.3;31.5.3?priority_queue;1031
6.2.6;31.6?Ratschläge;1032
6.3;32 STL-Algorithmen;1036
6.3.1;32.1?Einführung;1036
6.3.2;32.2?Algorithmen;1036
6.3.2.1;32.2.1?Sequenzen;1037
6.3.3;32.3?Richtlinienargumente;1038
6.3.3.1;32.3.1?Komplexität;1040
6.3.4;32.4 Nichtmodifizierende Sequenzalgorithmen;1041
6.3.4.1;32.4.1?for_each();1041
6.3.4.2;32.4.2?Sequenzprädikate;1041
6.3.4.3;32.4.3?count();1042
6.3.4.4;32.4.4?find();1042
6.3.4.5;32.4.5?equal() und mismatch();1043
6.3.4.6;32.4.6?search();1044
6.3.5;32.5?Modifizierende Sequenzalgorithmen;1045
6.3.5.1;32.5.1?copy();1046
6.3.5.2;32.5.2?unique();1047
6.3.5.3;32.5.3?remove(), reverse() und replace();1048
6.3.5.4;32.5.4?rotate(), random_shuffle() und partition();1049
6.3.5.5;32.5.5?Permutationen;1050
6.3.5.6;32.5.6?fill();1051
6.3.5.7;32.5.7?swap();1052
6.3.6;32.6?Sortieren und Suchen;1053
6.3.6.1;32.6.1?Binäre Suche;1056
6.3.6.2;32.6.2?merge();1057
6.3.6.3;32.6.3?Mengenalgorithmen;1058
6.3.6.4;32.6.4?Heaps;1059
6.3.6.5;32.6.5?lexicographical_compare();1061
6.3.7;32.7?Minimum und Maximum;1061
6.3.8;32.8?Ratschläge;1063
6.4;33 STL-Iteratoren;1064
6.4.1;33.1?Einführung;1064
6.4.1.1;33.1.1?Iteratormodell;1064
6.4.1.2;33.1.2?Iteratorkategorien;1066
6.4.1.3;33.1.3?Iterator-Traits;1067
6.4.1.4;33.1.4?Iteratoroperationen;1070
6.4.2;33.2?Iteratoradapter;1071
6.4.2.1;33.2.1?Reverse-Iteratoren;1071
6.4.2.2;33.2.2?Einfügeiteratoren;1074
6.4.2.3;33.2.3?Verschiebeiteratoren;1075
6.4.3;33.3?Bereichszugriffsfunktionen;1076
6.4.4;33.4?Funktionsobjekte;1077
6.4.5;33.5?Funktionsadapter;1078
6.4.5.1;33.5.1?bind();1079
6.4.5.2;33.5.2?mem_fn();1081
6.4.5.3;33.5.3?function;1081
6.4.6;33.6?Ratschläge;1084
6.5;34 Speicher und Ressourcen;1086
6.5.1;34.1?Einführung;1086
6.5.2;34.2?„Beinahe-Container“;1086
6.5.2.1;34.2.1?array;1087
6.5.2.2;34.2.2?bitset;1090
6.5.2.2.1;34.2.2.1?Konstruktoren;1091
6.5.2.2.2;34.2.2.2?bitset-Operationen;1093
6.5.2.3;34.2.3?vector