Um unsere Webseiten für Sie optimal zu gestalten und fortlaufend zu verbessern, verwenden wir Cookies. Durch Bestätigen des Buttons »Akzeptieren« stimmen Sie der Verwendung zu. Über den Button »Einstellungen« können Sie auswählen, welche Cookies Sie zulassen wollen.

AkzeptierenEinstellungen
Der C++-Programmierer -  Ulrich Breymann

Der C++-Programmierer (eBook)

C++ lernen - professionell anwenden - Lösungen nutzen.Aktuell zu C++17
eBook Download: PDF
2017 | 5. Auflage
1010 Seiten
Carl Hanser Fachbuchverlag
978-3-446-45386-9 (ISBN)
Systemvoraussetzungen
31,99 inkl. MwSt
  • Download sofort lieferbar
  • Zahlungsarten anzeigen
Ein C++-Praxisbuch für alle Ansprüche - mehr brauchen Einsteiger und Profis nicht - jetzt mit farbigem Code
'Der C++-Programmierer' entspricht dem ISO- Standard C++17. Das Buch stellt Grundlagen und fortgeschrittene Themen der C++-Programmierung vor. Es enthält über 150 praktische Lösungen für typische Aufgabenstellungen und mehr als 90 Übungsaufgaben - inkl. Musterlösungen.
C++ an Beispielen lernen
- Als C++-Neuling erhalten Sie eine motivierende Einführung in die Sprache C++. Die vielen Beispiele sind leicht nachzuvollziehen. Klassen und Objekte, Templates, STL und Exceptions sind bald keine Fremdwörter mehr für Sie.
- Als Profi finden Sie in diesem Buch kurze Einführungen zu Themen wie Thread- und Netzwerkprogrammierung und grafische Benutzungsoberflächen. Durch den Einsatz der Boost- und Qt-Libraries wird größtmögliche
Portabilität erreicht.
Kenntnisse in der Softwareentwicklung mit C++ vertiefen
Weil Softwareentwicklung nicht nur Programmierung ist, finden Sie ergänzend Themen für die professionelle Arbeit: Die effiziente Programmerzeugung mit make, Unit-Tests und TDD (Test Driven Development).
Das unverzichtbare Nachschlagewerk für alle
Das integrierte 'C++-Rezeptbuch' mit mehr als 150 praktischen Lösungen, das sehr umfangreiche Register und ein detailliertes Inhaltsverzeichnis machen das Buch zu einem unverzichtbaren Nachschlagewerk für alle, die sich im Studium oder professionell mit der Softwareentwicklung in C++ beschäftigen.

Prof. Dr. Ulrich Breymann lehrte Informatik an der Hochschule Bremen. Er engagierte sich im DIN-Arbeitskreis zur ersten Standardisierung von C++ und ist ein renommierter Autor zum Thema C++. Aus seiner Tätigkeit in Industrie und Hochschule weiß er genau, worauf es bei der Softwareentwicklung mit C++ ankommt. Er versteht es, auch komplexe Sachverhalte verständlich darzustellen.

Prof. Dr. Ulrich Breymann lehrte Informatik an der Hochschule Bremen. Er engagierte sich im DIN-Arbeitskreis zur ersten Standardisierung von C++ und ist ein renommierter Autor zum Thema C++. Aus seiner Tätigkeit in Industrie und Hochschule weiß er genau, worauf es bei der Softwareentwicklung mit C++ ankommt. Er versteht es, auch komplexe Sachverhalte verständlich darzustellen.

Inhaltsverzeichnis 6
Vorwort 24
Teil I: Einführung in C++ 28
1 Es geht los! 30
1.1 Historisches 30
1.2 Objektorientierte Programmierung 31
1.3 Werkzeuge zum Programmieren 33
1.4 Das erste Programm 34
1.4.1 Namenskonventionen 40
1.5 Integrierte Entwicklungsumgebung 40
1.6 Einfache Datentypen und Operatoren 43
1.6.1 Ausdruck 43
1.6.2 Ganze Zahlen 43
1.6.3 Reelle Zahlen 50
1.6.4 Konstanten 54
1.6.5 Zeichen 55
1.6.6 Logischer Datentyp bool 59
1.6.7 Referenzen 60
1.6.8 Regeln zum Bilden von Ausdrücken 61
1.6.9 Standard-Typumwandlungen 62
1.7 Gültigkeitsbereich und Sichtbarkeit 63
1.7.1 Namespace std 65
1.8 Kontrollstrukturen 66
1.8.1 Anweisungen 66
1.8.2 Sequenz (Reihung) 68
1.8.3 Auswahl (Selektion, Verzweigung) 68
1.8.4 Fallunterscheidungen mit switch 73
1.8.5 Wiederholungen 76
1.8.6 Kontrolle mit break und continue 83
1.9 Benutzerdefinierte und zusammengesetzte Datentypen 85
1.9.1 Aufzählungstypen 85
1.9.2 Strukturen 88
1.9.3 Der C++-Standardtyp vector 89
1.9.4 Zeichenketten: Der C++-Standardtyp string 94
1.9.5 Container und Schleifen 96
1.9.6 Typermittlung mit auto 98
1.9.7 Deklaration einer strukturierten Bindung mit auto 99
1.9.8 Unions und Bitfelder 100
1.10 Einfache Ein- und Ausgabe 102
1.10.1 Standardein- und -ausgabe 102
1.10.2 Ein- und Ausgabe mit Dateien 105
2 Programmstrukturierung 110
2.1 Funktionen 110
2.1.1 Aufbau und Prototypen 111
2.1.2 Gültigkeitsbereiche und Sichtbarkeit in Funktionen 113
2.1.3 Lokale static-Variable: Funktion mit Gedächtnis 114
2.2 Schnittstellen zum Datentransfer 115
2.2.1 Übergabe per Wert 116
2.2.2 Übergabe per Referenz 120
2.2.3 Gefahren bei der Rückgabe von Referenzen 121
2.2.4 Vorgegebene Parameterwerte und unterschiedliche Parameterzahl 122
2.2.5 Überladen von Funktionen 123
2.2.6 Funktion main() 124
2.2.7 Beispiel Taschenrechnersimulation 125
2.2.8 Spezifikation von Funktionen 130
2.2.9 Alternative Funktions-Syntax 130
2.3 Modulare Programmgestaltung 130
2.3.1 Steuerung der Übersetzung nur mit #include 131
2.3.2 Einbinden vorübersetzter Programmteile 131
2.3.3 Übersetzungseinheit, Deklaration, Definition 133
2.3.4 Dateiübergreifende Gültigkeit und Sichtbarkeit 135
2.3.5 Präprozessordirektiven und Makros 137
2.4 Namensräume 145
2.5 inline-Funktionen und -Variable 147
2.5.1 inline-Variablen 148
2.6 constexpr-Funktionen 148
2.7 Rückgabetyp auto 150
2.8 Funktions-Templates 152
2.8.1 Spezialisierung von Templates 154
2.8.2 Einbinden von Templates 155
2.9 C++-Header 157
2.9.1 Einbinden von C-Funktionen 159
3 Objektorientierung 1 160
3.1 Abstrakter Datentyp 161
3.2 Klassen und Objekte 162
3.2.1 const-Objekte und Methoden 165
3.2.2 inline-Elementfunktionen 166
3.3 Initialisierung und Konstruktoren 167
3.3.1 Standardkonstruktor 167
3.3.2 Direkte Initialisierung der Attribute 169
3.3.3 Allgemeine Konstruktoren 169
3.3.4 Kopierkonstruktor 172
3.3.5 Typumwandlungskonstruktor 175
3.3.6 Konstruktor und mehr vorgeben oder verbieten 177
3.3.7 Einheitliche Initialisierung und Sequenzkonstruktor 177
3.3.8 Delegierender Konstruktor 180
3.3.9 constexpr-Konstruktor und -Methoden 181
3.4 Beispiel: Rationale Zahlen 184
3.4.1 Aufgabenstellung 184
3.4.2 Entwurf 185
3.4.3 Implementation 188
3.5 Destruktoren 193
3.6 Wie kommt man zu Klassen und Objekten? Ein Beispiel 195
3.7 Gegenseitige Abhängigkeit von Klassen 200
4 Intermezzo: Zeiger 202
4.1 Zeiger und Adressen 203
4.2 C-Arrays 206
4.2.1 C-Array, std::size() und sizeof 208
4.2.2 Initialisierung von C-Arrays 209
4.2.3 Zeigerarithmetik 209
4.2.4 Indexoperator bei C-Arrays 210
4.2.5 C-Array mit begin() und end() durchlaufen 210
4.3 C-Zeichenketten 211
4.3.1 Schleifen und C-Strings 214
4.4 Dynamische Datenobjekte 218
4.4.1 Freigeben dynamischer Objekte 221
4.5 Zeiger und Funktionen 223
4.5.1 Parameterübergabe mit Zeigern 223
4.5.2 Array als Funktionsparameter 225
4.5.3 const und Zeiger-Parameter 226
4.5.4 Parameter des main-Programms 226
4.5.5 Gefahren bei der Rückgabe von Zeigern 227
4.6 this-Zeiger 228
4.7 Mehrdimensionale C-Arrays 230
4.7.1 Statische mehrdimensionale C-Arrays 230
4.7.2 Mehrdimensionales Array als Funktionsparameter 231
4.7.3 Dynamisch erzeugte mehrdimensionale Arrays 234
4.7.4 Klasse für dynamisches zweidimensionales Array 236
4.8 Binäre Ein-/Ausgabe 242
4.9 Zeiger auf Funktionen 245
4.10 Typumwandlungen für Zeiger 249
4.11 Zeiger auf Elementfunktionen und -daten 250
4.11.1 Zeiger auf Elementfunktionen 250
4.11.2 Zeiger auf Elementdaten 251
4.12 Komplexe Deklarationen lesen 251
4.12.1 Lesbarkeit mit typedef und using verbessern 252
4.13 Alternative zu rohen Zeigern, new und delete 254
5 Objektorientierung 2 256
5.1 Eine String-Klasse 256
5.1.1 friend-Funktionen 262
5.2 String-Ansicht 263
5.3 Klassenspezifische Daten und Funktionen 266
5.3.1 Klassenspezifische Konstante 270
5.4 Klassen-Templates 272
5.4.1 Ein Stack-Template 272
5.4.2 Stack mit statisch festgelegter Größe 274
5.5 Typbestimmung mit decltype und declval 276
6 Vererbung 280
6.1 Vererbung und Initialisierung 286
6.2 Zugriffsschutz 287
6.3 Typbeziehung zwischen Ober- und Unterklasse 289
6.4 Code-Wiederverwendung 290
6.4.1 Konstruktor erben 291
6.5 Überschreiben von Funktionen in abgeleiteten Klassen 293
6.5.1 Virtuelle Funktionen 295
6.5.2 Abstrakte Klassen 300
6.5.3 Virtueller Destruktor 305
6.5.4 Private virtuelle Funktionen 308
6.6 Probleme der Modellierung mit Vererbung 310
6.7 Mehrfachvererbung 313
6.7.1 Namenskonflikte 315
6.7.2 Virtuelle Basisklassen 316
6.8 Standard-Typumwandlungsoperatoren 320
6.9 Typinformationen zur Laufzeit 323
6.10 Using-Deklaration für protected-Funktionen 324
6.11 Private- und Protected-Vererbung 325
7 Fehlerbehandlung 330
7.1 Ausnahmebehandlung 332
7.1.1 Exception-Spezifikation in Deklarationen 335
7.1.2 Exception-Hierarchie in C++ 336
7.1.3 Besondere Fehlerbehandlungsfunktionen 338
7.1.4 Erkennen logischer Fehler 339
7.1.5 Arithmetische Fehler / Division durch 0 341
7.2 Speicherbeschaffung mit new 342
7.3 Exception-Sicherheit 343
8 Überladen von Operatoren 346
8.1 Rationale Zahlen — noch einmal 348
8.1.1 Arithmetische Operatoren 348
8.1.2 Ausgabeoperator < <
8.2 Eine Klasse für Vektoren 352
8.2.1 Index-Operator [ ] 355
8.2.2 Zuweisungsoperator = 357
8.2.3 Mathematische Vektoren 360
8.2.4 Multiplikationsoperator 361
8.3 Inkrement-Operator ++ 362
8.4 Typumwandlungsoperator 366
8.5 Smart Pointer: Operatoren -> und *
8.5.1 Smart Pointer und die C++-Standardbibliothek 373
8.6 Objekt als Funktion 374
8.7 new und delete überladen 376
8.7.1 Unterscheidung zwischen Heap- und Stack-Objekten 379
8.7.2 Fehlende delete-Anweisung entdecken 381
8.7.3 Eigene Speicherverwaltung für einen bestimmten Typ 382
8.7.4 Empfehlungen im Umgang mit new und delete 386
8.8 Operatoren für Literale 387
8.8.1 Stringliterale 388
8.8.2 Benutzerdefinierte Literale 389
8.9 Mehrdimensionale Matrizen 391
8.9.1 Zweidimensionale Matrix als Vektor von Vektoren 392
8.9.2 Dreidimensionale Matrix 395
8.10 Zuweisung und Vergleich bei Vererbung 397
9 Dateien und Ströme 406
9.1 Ausgabe 408
9.1.1 Formatierung der Ausgabe 408
9.2 Eingabe 411
9.3 Manipulatoren 414
9.3.1 Eigene Manipulatoren 419
9.4 Fehlerbehandlung 421
9.5 Typumwandlung von Dateiobjekten nach bool 422
9.6 Arbeit mit Dateien 423
9.6.1 Positionierung in Dateien 424
9.6.2 Lesen und Schreiben in derselben Datei 425
9.7 Umleitung auf Strings 426
9.8 Tabelle formatiert ausgeben 428
9.9 Formatierte Daten lesen 429
9.9.1 Eingabe benutzerdefinierter Typen 429
9.10 Blockweise lesen und schreiben 430
9.10.1 vector-Objekt binär lesen und schreiben 431
9.10.2 array-Objekt binär lesen und schreiben 432
9.10.3 Matrix binär lesen und schreiben 433
9.11 Ergänzungen 435
10 Die Standard Template Library (STL) 436
10.1 Container, Iteratoren, Algorithmen 437
10.2 Iteratoren im Detail 442
10.3 Beispiel verkettete Liste 443
Teil II: Fortgeschrittene Themen 448
11 Performance, Wert- und Referenzsemantik 450
11.1 Performanceproblem Wertsemantik 451
11.1.1 Auslassen der Kopie 452
11.1.2 Temporäre Objekte bei der Zuweisung 453
11.2 Referenzsemantik für R-Werte 454
11.3 Optimierung durch Referenzsemantik für R-Werte 456
11.3.1 Bewegender Konstruktor 459
11.3.2 Bewegender Zuweisungsoperator 459
11.4 Die move()-Funktion 460
11.4.1 Regel zur Template-Auswertung von & &
11.5 Ein effizienter binärer Plusoperator 463
11.5.1 Return Value Optimization (RVO) 464
11.5.2 Kopien temporärer Objekte eliminieren 464
11.5.3 Verbesserung durch verzögerte Auswertung 465
11.5.4 Weitere Optimierungsmöglichkeiten 467
11.6 Rule of three/five/zero 468
11.6.1 Rule of three 468
11.6.2 Rule of five 468
11.6.3 Rule of zero 469
12 Lambda-Funktionen 470
12.1 Eigenschaften 471
12.1.1 Äquivalenz zum Funktionszeiger 472
12.1.2 Lambda-Funktion und Klasse 473
12.2 Generische Lambda-Funktionen 473
12.3 Parametererfassung mit [] 476
13 Template-Metaprogrammierung 478
13.1 Grundlagen 478
13.2 Variadic Templates: Templates mit variabler Parameterzahl 481
13.2.1 Ablauf der Auswertung durch den Compiler 482
13.2.2 Anzahl der Parameter 483
13.2.3 Parameterexpansion 483
13.3 Fold-Expressions 485
13.3.1 Weitere Varianten 486
13.3.2 Fold-Expression mit Kommaoperator 487
13.4 Klassen-Template mit variabler Stelligkeit 489
14 Reguläre Ausdrücke 490
14.1 Elemente regulärer Ausdrücke 491
14.1.1 Greedy oder lazy? 493
14.2 Interaktive Auswertung 494
14.3 Auszug des regex-API 497
14.4 Verarbeitung von /n 499
14.5 Anwendungen 500
15 Threads 502
15.1 Zeit und Dauer 503
15.2 Threads 504
15.3 Die Klasse thread 508
15.3.1 Thread-Group 510
15.4 Synchronisation kritischer Abschnitte 511
15.5 Thread-Steuerung: Pausieren, Fortsetzen, Beenden 514
15.5.1 Data Race 519
15.6 Warten auf Ereignisse 519
15.7 Reader/Writer-Problem 525
15.7.1 Wenn Threads verhungern 529
15.7.2 Reader/Writer-Varianten 530
15.8 Atomare Veränderung von Variablen 530
15.9 Asynchrone verteilte Bearbeitung einer Aufgabe 533
15.10 Thread-Sicherheit 535
16 Grafische Benutzungsschnittstellen 536
16.1 Ereignisgesteuerte Programmierung 537
16.2 GUI-Programmierung mit Qt 538
16.2.1 Installation und Einsatz 538
16.2.2 Meta-Objektsystem 539
16.2.3 Der Programmablauf 540
16.2.4 Ereignis abfragen 541
16.3 Signale, Slots und Widgets 542
16.4 Dialog 551
16.5 Qt oder Standard-C++? 554
16.5.1 Threads 555
16.5.2 Verzeichnisbaum durchwandern 556
17 Internet-Anbindung 558
17.1 Protokolle 559
17.2 Adressen 559
17.3 Socket 563
17.3.1 Bidirektionale Kommunikation 566
17.3.2 UDP-Sockets 568
17.3.3 Atomuhr mit UDP abfragen 569
17.4 HTTP 572
17.4.1 Verbindung mit GET 573
17.4.2 Verbindung mit POST 578
17.5 Mini-Webserver 579
18 Datenbankanbindung 588
18.1 C++-Interface 589
18.2 Anwendungsbeispiel 593
Teil III: Ausgewählte Methoden und Werkzeuge der Softwareentwicklung 600
19 Effiziente Programmerzeugung mit make 602
19.1 Wirkungsweise 604
19.2 Variablen und Muster 606
19.3 Universelles Makefile für einfache Projekte 607
19.4 Automatische Ermittlung von Abhängigkeiten 608
19.4.1 Getrennte Verzeichnisse: src, obj, bin 610
19.5 Makefile für Verzeichnisbäume 612
19.5.1 Rekursive Make-Aufrufe 613
19.5.2 Ein Makefile für alles 615
19.6 Automatische Erzeugung von Makefiles 616
19.6.1 Makefile für rekursive Aufrufe erzeugen 617
19.7 Erzeugen von Bibliotheken 618
19.7.1 Statische Bibliotheksmodule 618
19.7.2 Dynamische Bibliotheksmodule 620
19.8 Code Bloat bei der Instanziierung von Templates vermeiden 623
19.8.1 extern-Template 624
19.9 CMake 625
19.10 GNU Autotools 627
20 Unit-Test 628
20.1 Werkzeuge 629
20.2 Test Driven Development 630
20.3 Boost Unit Test Framework 631
20.3.1 Beispiel: Testgetriebene Entwicklung einer Operatorfunktion 633
20.3.2 Fixture 637
20.3.3 Testprotokoll und Log-Level 638
20.3.4 Prüf-Makros 639
20.3.5 Kommandozeilen-Optionen 643
Teil IV: Das C++-Rezeptbuch: Tipps und Lösungen für typische Aufgaben 644
21 Sichere Programmentwicklung 646
21.1 Regeln zum Design von Methoden 646
21.2 Defensive Programmierung 648
21.2.1 double- und float-Werte richtig vergleichen 649
21.2.2 const und constexpr verwenden 650
21.2.3 Anweisungen nach for/if/while einklammern 650
21.2.4 int und unsigned/size_t nicht mischen 650
21.2.5 size_t oder auto statt unsigned int verwenden 651
21.2.6 Postfix++ mit Präfix++ implementieren 651
21.2.7 Ein Destruktor darf keine Exception werfen 652
21.2.8 explicit-Typumwandlungsoperator bevorzugen 652
21.2.9 explicit-Konstruktor für eine Typumwandlung bevorzugen 652
21.2.10 Leere Standardkonstruktoren vermeiden 652
21.2.11 Mit override Schreibfehler reduzieren 652
21.2.12 Kopieren und Zuweisung verbieten 652
21.2.13 Vererbung verbieten 653
21.2.14 Überschreiben einer virtuellen Methode verhindern 654
21.2.15 > >
21.2.16 One Definition Rule 654
21.2.17 Defensiv Objekte löschen 654
21.2.18 Speicherbeschaffung und -freigabe kapseln 655
21.2.19 Programmierrichtlinien einhalten 655
21.3 Exception-sichere Beschaffung von Ressourcen 655
21.3.1 Sichere Verwendung von unique_ptr und shared_ptr 655
21.3.2 So vermeiden Sie new und delete! 656
21.3.3 shared_ptr für Arrays korrekt verwenden 657
21.3.4 unique_ptr für Arrays korrekt verwenden 658
21.3.5 Exception-sichere Funktion 659
21.3.6 Exception-sicherer Konstruktor 659
21.3.7 Exception-sichere Zuweisung 660
21.4 Empfehlungen zur Thread-Programmierung 661
21.4.1 Warten auf die Freigabe von Ressourcen 661
21.4.2 Deadlock-Vermeidung 662
21.4.3 notify_all oder notify_one? 662
21.4.4 Performance mit Threads verbessern? 663
22 Von der UML nach C++ 664
22.1 Vererbung 664
22.2 Interface anbieten und nutzen 665
22.3 Assoziation 667
22.3.1 Aggregation 670
22.3.2 Komposition 670
23 Algorithmen für verschiedene Aufgaben 672
23.1 Algorithmen mit Strings 673
23.1.1 String splitten 673
23.1.2 String in Zahl umwandeln 674
23.1.3 Zahl in String umwandeln 676
23.1.4 Strings sprachlich richtig sortieren 677
23.1.5 Umwandlung in Klein- bzw. Großschreibung 679
23.1.6 Strings sprachlich richtig vergleichen 681
23.1.7 Von der Groß-/Kleinschreibung unabhängiger Zeichenvergleich 682
23.1.8 Von der Groß-/Kleinschreibung unabhängige Suche 683
23.2 Textverarbeitung 684
23.2.1 Datei durchsuchen 684
23.2.2 Ersetzungen in einer Datei 686
23.2.3 Lines of Code (LOC) ermitteln 688
23.2.4 Zeilen, Wörter und Zeichen einer Datei zählen 689
23.2.5 CSV-Datei lesen 689
23.2.6 Kreuzreferenzliste 690
23.3 Operationen auf Folgen 693
23.3.1 Container anzeigen 694
23.3.2 Folge mit gleichen Werten initialisieren 694
23.3.3 Folge mit Werten eines Generators initialisieren 695
23.3.4 Folge mit fortlaufenden Werten initialisieren 695
23.3.5 Summe und Produkt 696
23.3.6 Mittelwert und Standardabweichung 697
23.3.7 Skalarprodukt 697
23.3.8 Folge der Teilsummen oder -produkte 698
23.3.9 Folge der Differenzen 699
23.3.10 Kleinstes und größtes Element finden 700
23.3.11 Elemente rotieren 702
23.3.12 Elemente verwürfeln 703
23.3.13 Dubletten entfernen 703
23.3.14 Reihenfolge umdrehen 705
23.3.15 Stichprobe 706
23.3.16 Anzahl der Elemente, die einer Bedingung genügen 707
23.3.17 Gilt ein Prädikat für alle, keins oder wenigstens ein Element einer Folge? 708
23.3.18 Permutationen 709
23.3.19 Lexikografischer Vergleich 712
23.4 Sortieren und Verwandtes 713
23.4.1 Partitionieren 713
23.4.2 Sortieren 715
23.4.3 Stabiles Sortieren 716
23.4.4 Partielles Sortieren 717
23.4.5 Das n.-größte oder n.-kleinste Element finden 718
23.4.6 Verschmelzen (merge) 719
23.5 Suchen und Finden 722
23.5.1 Element finden 722
23.5.2 Element einer Menge in der Folge finden 723
23.5.3 Teilfolge finden 724
23.5.4 Teilfolge mit speziellem Algorithmus finden 725
23.5.5 Bestimmte benachbarte Elemente finden 727
23.5.6 Bestimmte aufeinanderfolgende Werte finden 728
23.5.7 Binäre Suche 729
23.6 Mengenoperationen auf sortierten Strukturen 731
23.6.1 Teilmengenrelation 732
23.6.2 Vereinigung 733
23.6.3 Schnittmenge 734
23.6.4 Differenz 734
23.6.5 Symmetrische Differenz 735
23.7 Heap-Algorithmen 736
23.7.1 pop_heap 737
23.7.2 push_heap 738
23.7.3 make_heap 738
23.7.4 sort_heap 739
23.7.5 is_heap 739
23.8 Vergleich von Containern auch ungleichen Typs 740
23.8.1 Unterschiedliche Elemente finden 740
23.8.2 Prüfung auf gleiche Inhalte 742
23.9 Rechnen mit komplexen Zahlen: Der C++-Standardtyp complex 743
23.10 Schnelle zweidimensionale Matrix 745
23.10.1 Optimierung mathematischer Array-Operationen 748
23.11 Vermischtes 751
23.11.1 Erkennung eines Datums 751
23.11.2 Erkennung einer IPv4-Adresse 753
23.11.3 Erzeugen von Zufallszahlen 754
23.11.4 for_each — Auf jedem Element eine Funktion ausführen 759
23.11.5 Verschiedene Möglichkeiten, Container-Bereiche zu kopieren 759
23.11.6 Vertauschen von Elementen, Bereichen und Containern 762
23.11.7 Elemente transformieren 762
23.11.8 Ersetzen und Varianten 764
23.11.9 Elemente herausfiltern 765
23.11.10 Grenzwerte von Zahltypen 767
23.11.11 Minimum und Maximum 767
23.11.12 Wert begrenzen 769
23.11.13 ggT und kgV 770
23.12 Parallelisierbare Algorithmen 771
24 Datei- und Verzeichnisoperationen 772
24.1 Übersicht 773
24.2 Pfadoperationen 774
24.3 Datei oder Verzeichnis löschen 775
24.3.1 Möglicherweise gefülltes Verzeichnis löschen 776
24.4 Datei oder Verzeichnis kopieren 777
24.5 Datei oder Verzeichnis umbenennen 778
24.6 Verzeichnis anlegen 778
24.7 Verzeichnis anzeigen 779
24.8 Verzeichnisbaum anzeigen 780
Teil V: Die C++-Standardbibliothek 782
25 Aufbau und Übersicht 784
25.1 Auslassungen 786
25.2 Beispiele des Buchs und die C++-Standardbibliothek 787
26 Hilfsfunktionen und -klassen 790
26.1 Relationale Operatoren 790
26.2 Unterstützung der Referenzsemantik für R-Werte 791
26.2.1 move() 791
26.2.2 forward() 792
26.3 Paare 793
26.4 Tupel 795
26.5 bitset 797
26.6 Indexfolgen 800
26.7 variant statt union 801
26.8 Funktionsobjekte 802
26.8.1 Arithmetische, vergleichende und logische Operationen 802
26.8.2 Binden von Argumentwerten 803
26.8.3 Funktionen in Objekte umwandeln 805
26.9 Templates für rationale Zahlen 807
26.10 Hüllklasse für Referenzen 808
26.11 Optionale Objekte 809
26.12 Type Traits 811
26.12.1 Wie funktionieren Type Traits? — ein Beispiel 812
26.12.2 Abfrage von Eigenschaften 814
26.12.3 Abfrage numerischer Eigenschaften 816
26.12.4 Typbeziehungen 816
26.12.5 Typumwandlungen 817
26.13 Auswahl weiterer Traits 817
26.13.1 decay 817
26.13.2 enable_if 817
26.13.3 conditional 818
26.13.4 default_order 818
27 Container 820
27.1 Gemeinsame Eigenschaften 822
27.1.1 Initialisierungslisten 824
27.1.2 Konstruktion an Ort und Stelle 824
27.1.3 Reversible Container 825
27.2 Sequenzen 826
27.2.1 vector 827
27.2.2 vector< bool>
27.2.3 list 829
27.2.4 deque 832
27.2.5 stack 833
27.2.6 queue 835
27.2.7 priority_queue 837
27.2.8 array 839
27.3 Assoziative Container 841
27.4 Sortierte assoziative Container 843
27.4.1 map und multimap 844
27.4.2 set und multiset 848
27.5 Hash-Container 850
27.5.1 unordered_map und unordered_multimap 854
27.5.2 unordered_set und unordered_multiset 856
28 Iteratoren 858
28.1 Iterator-Kategorien 859
28.1.1 Anwendung von Traits 860
28.2 Abstand und Bewegen 863
28.3 Zugriff auf Anfang und Ende 864
28.3.1 Reverse-Iteratoren 865
28.4 Insert-Iteratoren 866
28.5 Stream-Iteratoren 867
29 Algorithmen 870
29.1 Algorithmen mit Prädikat 871
29.2 Übersicht 872
30 Nationale Besonderheiten 876
30.1 Sprachumgebung festlegen und ändern 876
30.1.1 Die locale-Funktionen 878
30.2 Zeichensätze und -codierung 880
30.3 Zeichenklassifizierung und -umwandlung 884
30.4 Kategorien 885
30.4.1 collate 885
30.4.2 ctype 886
30.4.3 numeric 888
30.4.4 monetary 889
30.4.5 time 892
30.4.6 messages 894
30.5 Konstruktion eigener Facetten 896
31 String 898
31.1 string_view für String-Literale 908
32 Speichermanagement 910
32.1 unique_ptr 910
32.1.1 make_unique 912
32.2 shared_ptr 913
32.2.1 make_shared 914
32.2.2 Typumwandlung in einen Oberklassentyp 914
32.3 weak_ptr 915
32.4 new mit Speicherortangabe 916
33 Numerische Arrays (valarray) 918
33.1 Konstruktoren 919
33.2 Elementfunktionen 919
33.3 Binäre Valarray-Operatoren 922
33.4 Mathematische Funktionen 924
33.5 slice und slice_array 925
33.6 gslice und gslice_array 928
33.7 mask_array 931
33.8 indirect_array 932
34 Ausgewählte C-Header 934
34.1 < cassert>
34.2 < cctype>
34.3 < cmath>
34.4 < cstddef>
34.5 < cstdlib>
34.6 < ctime>
34.7 < cstring>
A Anhang 942
A.1 ASCII-Tabelle 942
A.2 C++-Schlüsselwörter 944
A.3 Compilerbefehle 945
A.4 Rangfolge der Operatoren 946
A.5 C++-Attribute für den Compiler 947
A.6 Lösungen zu den Übungsaufgaben 948
A.7 Installation der Software für Windows 958
A.7.1 Installation des Compilers und der Entwicklungsumgebung 958
A.7.2 Integrierte Entwicklungsumgebung einrichten 959
A.7.3 De-Installation 959
A.8 Installation der Software für Linux 960
A.8.1 Installation des Compilers 960
A.8.2 Installation von Boost 961
A.8.3 Installation und Einrichtung von Code::Blocks 961
A.8.4 Beispieldateien entpacken 962
A.9 Installationshinweise für OS X 962
A.9.1 Installation von Boost 962
A.9.2 Beispieldateien entpacken 963
Glossar 964
Literaturverzeichnis 974
Register 978
1001_1008_Breymann_5A_Anzeigen.pdf 1
CHV_Anz_Seite1001_Gloger_44723 1002
CHV_Anz_Seite1001_Gloger_44723 1003
CHV_Anz_Seite1003_Leopold_44343 1004
CHV_Anz_Seite1003_Leopold_44343 1005
CHV_Anz_Seite1005_FreundRücker_5A_45054 1006
CHV_Anz_Seite1005_FreundRücker_5A_45054 1007
CHV_Anz_Seite1007_Starke_7A_44361 1008
CHV_Anz_Seite1007_Starke_7A_44361 1009

Erscheint lt. Verlag 6.11.2017
Verlagsort München
Sprache deutsch
Themenwelt Mathematik / Informatik Informatik Programmiersprachen / -werkzeuge
Schlagworte C++17 • Programmiersprache • Programmierung
ISBN-10 3-446-45386-5 / 3446453865
ISBN-13 978-3-446-45386-9 / 9783446453869
Informationen gemäß Produktsicherheitsverordnung (GPSR)
Haben Sie eine Frage zum Produkt?
PDFPDF (Wasserzeichen)
Größe: 22,3 MB

DRM: Digitales Wasserzeichen
Dieses eBook enthält ein digitales Wasser­zeichen und ist damit für Sie persona­lisiert. Bei einer missbräuch­lichen Weiter­gabe des eBooks an Dritte ist eine Rück­ver­folgung an die Quelle möglich.

Dateiformat: PDF (Portable Document Format)
Mit einem festen Seiten­layout eignet sich die PDF besonders für Fach­bücher mit Spalten, Tabellen und Abbild­ungen. Eine PDF kann auf fast allen Geräten ange­zeigt werden, ist aber für kleine Displays (Smart­phone, eReader) nur einge­schränkt geeignet.

Systemvoraussetzungen:
PC/Mac: Mit einem PC oder Mac können Sie dieses eBook lesen. Sie benötigen dafür einen PDF-Viewer - z.B. den Adobe Reader oder Adobe Digital Editions.
eReader: Dieses eBook kann mit (fast) allen eBook-Readern gelesen werden. Mit dem amazon-Kindle ist es aber nicht kompatibel.
Smartphone/Tablet: Egal ob Apple oder Android, dieses eBook können Sie lesen. Sie benötigen dafür einen PDF-Viewer - z.B. die kostenlose Adobe Digital Editions-App.

Zusätzliches Feature: Online Lesen
Dieses eBook können Sie zusätzlich zum Download auch online im Webbrowser lesen.

Buying eBooks from abroad
For tax law reasons we can sell eBooks just within Germany and Switzerland. Regrettably we cannot fulfill eBook-orders from other countries.

Mehr entdecken
aus dem Bereich
Das umfassende Handbuch

von Johannes Ernesti; Peter Kaiser

eBook Download (2023)
Rheinwerk Computing (Verlag)
44,90
Deterministische und randomisierte Algorithmen

von Volker Turau; Christoph Weyer

eBook Download (2024)
De Gruyter (Verlag)
64,95
Das umfassende Handbuch

von Christian Wenz; Tobias Hauser

eBook Download (2024)
Rheinwerk Computing (Verlag)
49,90