Der C++-Programmierer - C++ lernen - professionell anwenden - Lösungen nutzen

Ulrich Breymann

Der C++-Programmierer

C++ lernen - professionell anwenden - Lösungen nutzen

2015

992 Seiten

Format: PDF, Online Lesen

E-Book: €  31,99

E-Book kaufen

E-Book kaufen

ISBN: 9783446444041

 

Inhaltsverzeichnis

8

Vorwort

26

Teil I: Einführung in C++

30

1 Es geht los!

32

1.1 Historisches

32

1.2 Objektorientierte Programmierung

33

1.3 Compiler

35

1.4 Das erste Programm

36

1.4.1 Namenskonventionen

41

1.5 Integrierte Entwicklungsumgebung

42

1.6 Einfache Datentypen und Operatoren

44

1.6.1 Ausdruck

44

1.6.2 Ganze Zahlen

44

1.6.3 Reelle Zahlen

50

1.6.4 Konstante

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

60

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

72

1.8.5 Wiederholungen

74

1.8.6 Kontrolle mit break und continue

81

1.9 Benutzerdefinierte und zusammengesetzte Datentypen

84

1.9.1 Aufzählungstypen

84

1.9.2 Strukturen

86

1.9.3 Der C++-Standardtyp vector

87

1.9.4 Zeichenketten: Der C++-Standardtyp string

92

1.9.5 Container und Schleifen

95

1.9.6 Typermittlung mit auto

96

1.9.7 Unions und Bitfelder

97

1.10 Einfache Ein- und Ausgabe

99

1.10.1 Standardein- und -ausgabe

99

1.10.2 Ein- und Ausgabe mit Dateien

103

2 Programmstrukturierung

108

2.1 Funktionen

109

2.1.1 Aufbau und Prototypen

109

2.1.2 Gültigkeitsbereiche und Sichtbarkeit in Funktionen

111

2.1.3 Lokale static-Variable: Funktion mit Gedächtnis

112

2.2 Schnittstellen zum Datentransfer

113

2.2.1 Übergabe per Wert

114

2.2.2 Übergabe per Referenz

118

2.2.3 Gefahren bei der Rückgabe von Referenzen

119

2.2.4 Vorgegebene Parameterwerte und unterschiedliche Parameterzahl

120

2.2.5 Überladen von Funktionen

121

2.2.6 Funktion main()

122

2.2.7 Beispiel Taschenrechnersimulation

123

2.2.8 Spezifikation von Funktionen

127

2.2.9 Alternative Funktions-Syntax

128

2.3 Modulare Programmgestaltung

128

2.3.1 Steuerung der Übersetzung nur mit #include

129

2.3.2 Einbinden vorübersetzter Programmteile

129

2.3.3 Dateiübergreifende Gültigkeit und Sichtbarkeit

131

2.3.4 Übersetzungseinheit, Deklaration, Definition

133

2.3.5 Präprozessordirektiven und Makros

135

2.4 Funktions-Templates

141

2.4.1 Spezialisierung von Templates

144

2.4.2 Einbinden von Templates

145

2.5 inline-Funktionen

146

2.6 constexpr-Funktionen

147

2.7 Namensräume

150

2.8 C++-Header

151

2.8.1 Einbinden von C-Funktionen

153

3 Objektorientierung 1

154

3.1 Abstrakte Datentypen

154

3.2 Klassen und Objekte

156

3.2.1 const-Objekte und Methoden

160

3.2.2 inline-Elementfunktionen

160

3.3 Initialisierung und Konstruktoren

162

3.3.1 Standardkonstruktor

162

3.3.2 Direkte Initialisierung der Attribute

163

3.3.3 Allgemeine Konstruktoren

163

3.3.4 Kopierkonstruktor

166

3.3.5 Typumwandlungskonstruktor

168

3.3.6 Konstruktor und mehr vorgeben oder verbieten

171

3.3.7 Einheitliche Initialisierung und Sequenzkonstruktor

171

3.3.8 Delegierender Konstruktor

173

3.3.9 constexpr-Konstruktor und -Methoden

174

3.4 Beispiel: Rationale Zahlen

177

3.4.1 Aufgabenstellung

177

3.4.2 Entwurf

179

3.4.3 Implementation

182

3.5 Destruktoren

187

3.6 Wie kommt man zu Klassen und Objekten? Ein Beispiel

189

3.7 Gegenseitige Abhängigkeit von Klassen

193

4 Intermezzo: Zeiger

196

4.1 Zeiger und Adressen

197

4.2 C-Arrays

200

4.2.1 C-Array und sizeof

202

4.2.2 Initialisierung von C-Arrays

202

4.2.3 Zeigerarithmetik

203

4.2.4 Indexoperator bei C-Arrays

204

4.2.5 C-Array mit begin() und end() durchlaufen

204

4.3 C-Zeichenketten

205

4.4 Dynamische Datenobjekte

212

4.4.1 Freigeben dynamischer Objekte

214

4.5 Zeiger und Funktionen

217

4.5.1 Parameterübergabe mit Zeigern

217

4.5.2 Parameter des main-Programms

219

4.5.3 Gefahren bei der Rückgabe von Zeigern

220

4.6 this-Zeiger

221

4.7 Mehrdimensionale C-Arrays

221

4.7.1 Statische mehrdimensionale C-Arrays

221

4.7.2 Array als Funktionsparameter

222

4.7.3 Dynamisch erzeugte mehrdimensionale Arrays

226

4.7.4 Klasse für dynamisches zweidimensionales Array

228

4.8 Binäre Ein-/Ausgabe

234

4.9 Zeiger auf Funktionen

237

4.10 Standard-Typumwandlungen für Zeiger

240

4.11 Zeiger auf Elementfunktionen und -daten

242

4.11.1 Zeiger auf Elementfunktionen

242

4.11.2 Zeiger auf Elementdaten

243

4.12 Komplexe Deklarationen lesen

243

4.12.1 Lesbarkeit mit typedef und using verbessern

244

5 Objektorientierung 2

246

5.1 Eine String-Klasse

246

5.1.1 friend-Funktionen

252

5.2 Klassenspezifische Daten und Funktionen

253

5.2.1 Klassenspezifische Konstante

257

5.3 Klassen-Templates

259

5.3.1 Ein Stack-Template

259

5.3.2 Stack mit statisch festgelegter Größe

261

5.4 Template-Metaprogrammierung

263

5.5 Variadic Templates: Templates mit variabler Parameterzahl

265

5.5.1 Klassen-Templates mit variabler Stelligkeit

268

5.6 Typbestimmung mit decltype

270

5.6.1 declval

273

6 Vererbung

274

6.1 Vererbung und Initialisierung

280

6.2 Zugriffsschutz

281

6.3 Typbeziehung zwischen Ober- und Unterklasse

283

6.4 Code-Wiederverwendung

284

6.4.1 Konstruktor erben

285

6.5 Überschreiben von Funktionen in abgeleiteten Klassen

287

6.5.1 Virtuelle Funktionen

288

6.5.2 Abstrakte Klassen

293

6.5.3 Virtueller Destruktor

298

6.5.4 Private virtuelle Funktionen

302

6.6 Probleme der Modellierung mit Vererbung

303

6.7 Mehrfachvererbung

306

6.7.1 Namenskonflikte

309

6.7.2 Virtuelle Basisklassen

310

6.8 Standard-Typumwandlungsoperatoren

313

6.9 Typinformationen zur Laufzeit

316

6.10 Using-Deklaration für protected-Funktionen

318

6.11 Private- und Protected-Vererbung

318

7 Fehlerbehandlung

322

7.1 Ausnahmebehandlung

324

7.1.1 Exception-Spezifikation in Deklarationen

327

7.1.2 Exception-Hierarchie in C++

328

7.1.3 Besondere Fehlerbehandlungsfunktionen

329

7.1.4 Erkennen logischer Fehler

331

7.1.5 Arithmetische Fehler / Division durch 0

333

7.2 Speicherbeschaffung mit new

334

7.3 Exception-Sicherheit

336

8 Überladen von Operatoren

338

8.1 Rationale Zahlen — noch einmal

340

8.1.1 Arithmetische Operatoren

340

8.1.2 Ausgabeoperator <<

342

8.2 Eine Klasse für Vektoren

344

8.2.1 Index-Operator [ ]

347

8.2.2 Zuweisungsoperator =

350

8.2.3 Mathematische Vektoren

352

8.2.4 Multiplikationsoperator

353

8.3 Inkrement-Operator ++

355

8.4 Typumwandlungsoperator

359

8.5 Smart Pointer: Operatoren -> und *

360

8.5.1 Smart Pointer und die C++-Standardbibliothek

365

8.6 Objekt als Funktion

365

8.7 new und delete überladen

367

8.7.1 Speichermanagement mit malloc und free

370

8.7.2 Unterscheidung zwischen Heap- und Stack-Objekten

372

8.7.3 Fehlende delete-Anweisung entdecken

374

8.7.4 Eigene Speicherverwaltung für einen bestimmten Typ

375

8.7.5 Empfehlungen im Umgang mit new und delete

379

8.8 Operatoren für Literale

380

8.8.1 Stringliterale

380

8.8.2 Benutzerdefinierte Literale

381

8.9 Mehrdimensionale Matrizen

383

8.9.1 Zweidimensionale Matrix als Vektor von Vektoren

384

8.9.2 Dreidimensionale Matrix

387

8.10 Zuweisung bei Vererbung

389

9 Dateien und Ströme

400

9.1 Ausgabe

402

9.1.1 Formatierung der Ausgabe

402

9.2 Eingabe

405

9.3 Manipulatoren

408

9.3.1 Eigene Manipulatoren

413

9.4 Fehlerbehandlung

415

9.5 Typumwandlung von Dateiobjekten nach bool

416

9.6 Arbeit mit Dateien

417

9.6.1 Positionierung in Dateien

418

9.6.2 Lesen und Schreiben in derselben Datei

419

9.7 Umleitung auf Strings

420

9.8 Tabelle formatiert ausgeben

422

9.9 Formatierte Daten lesen

423

9.9.1 Eingabe benutzerdefinierter Typen

423

9.10 Blockweise lesen oder schreiben

424

9.11 Ergänzungen

427

10 Einführung in die Standard Template Library (STL)

428

10.1 Container, Iteratoren, Algorithmen

429

10.2 Iteratoren im Detail

434

10.3 Beispiel verkettete Liste

435

Teil II: Fortgeschrittene Themen

440

11 Lambda-Funktionen

442

11.1 Eigenschaften

443

11.1.1 Äquivalenz zum Funktionszeiger

444

11.1.2 Lambda-Funktion und Klasse

445

11.2 Generische Lambda-Funktionen

445

11.3 Parametererfassung mit []

447

12 Performance, Wert- und Referenzsemantik

448

12.1 Performanceproblem Wertsemantik

449

12.1.1 Auslassen der Kopie

450

12.1.2 Temporäre Objekte bei der Zuweisung

451

12.2 Referenzsemantik für R-Werte

452

12.3 Optimierung durch Referenzsemantik für R-Werte

454

12.3.1 Bewegender Konstruktor

457

12.3.2 Bewegender Zuweisungsoperator

457

12.4 Die move()-Funktion

458

12.4.1 Regel zur Template-Auswertung von &&-Parametern

460

12.5 Ein effizienter binärer Plusoperator

461

12.5.1 Return Value Optimization (RVO)

461

12.5.2 Kopien temporärer Objekte eliminieren

462

12.5.3 Verbesserung durch verzögerte Auswertung

463

13 Reguläre Ausdrücke

466

13.1 Elemente regulärer Ausdrücke

467

13.1.1 Greedy oder lazy?

469

13.2 Interaktive Auswertung

470

13.3 Auszug des regex-APIs

473

13.4 Anwendungen

475

14 Threads

476

14.1 Zeit und Dauer

477

14.2 Threads

478

14.3 Die Klasse thread

481

14.3.1 Thread-Group

484

14.4 Synchronisation

485

14.5 Thread-Steuerung: pausieren, fortsetzen, beenden

489

14.5.1 Data Race

493

14.6 Interrupt

494

14.7 Warten auf Ereignisse

496

14.8 Reader/Writer-Problem

501

14.8.1 Wenn Threads verhungern

506

14.8.2 Reader/Writer-Varianten

508

14.9 Thread-Sicherheit

508

15 Grafische Benutzungsschnittstellen

510

15.1 Ereignisgesteuerte Programmierung

511

15.2 GUI-Programmierung mit Qt

512

15.2.1 Installation und Einsatz

512

15.2.2 Meta-Objektsystem

513

15.2.3 Der Programmablauf

514

15.2.4 Ereignis abfragen

515

15.3 Signale, Slots und Widgets

516

15.4 Dialog

525

15.5 Qt oder Boost?

528

15.5.1 Threads

529

15.5.2 Verzeichnisbaum durchwandern

530

16 Internet-Anbindung

532

16.1 Protokolle

533

16.2 Adressen

533

16.3 Socket

537

16.3.1 Bidirektionale Kommunikation

540

16.3.2 UDP-Sockets

542

16.3.3 Atomuhr mit UDP abfragen

543

16.4 HTTP

546

16.4.1 Verbindung mit GET

547

16.4.2 Verbindung mit POST

552

16.5 Mini-Webserver

553

17 Datenbankanbindung

562

17.1 C++-Interface

563

17.2 Anwendungsbeispiel

567

Teil III: Praktische Methoden und Werkzeuge der Softwareentwicklung

574

18 Effiziente Programmerzeugung mit make

576

18.1 Quellen

577

18.2 Wirkungsweise

578

18.3 Variablen und Muster

580

18.4 Universelles Makefile für einfache Projekte

581

18.5 Automatische Ermittlung von Abhängigkeiten

582

18.5.1 Getrennte Verzeichnisse: src, obj, bin

584

18.6 Makefile für Verzeichnisbäume

586

18.6.1 Rekursive Make-Aufrufe

587

18.6.2 Ein Makefile für alles

589

18.7 Automatische Erzeugung von Makefiles

590

18.7.1 Makefile für rekursive Aufrufe erzeugen

591

18.8 Erzeugen von Bibliotheken

592

18.8.1 Statische Bibliotheksmodule

592

18.8.2 Dynamische Bibliotheksmodule

594

18.9 GNU Autotools

597

18.10 CMake

600

18.11 Code Bloat bei der Instanziierung von Templates vermeiden

600

18.11.1 extern-Template

601

18.11.2 Aufspaltung in Schnittstelle und Implementation

603

19 Unit-Test

604

19.1 Werkzeuge

605

19.2 Test Driven Development

606

19.3 Boost Unit Test Framework

607

19.3.1 Beispiel: Testgetriebene Entwicklung einer Operatorfunktion

609

19.3.2 Fixture

613

19.3.3 Testprotokoll und Log-Level

613

19.3.4 Prüf-Makros

615

19.3.5 Kommandozeilen-Optionen

618

20 Werkzeuge zur Verwaltung von Projekten

620

20.1 Dokumentation und Strukturanalyse mit doxygen

620

20.1.1 Strukturanalyse

624

20.2 Versionskontrolle

625

20.2.1 Subversion

625

20.2.2 Git

627

20.3 Projektverwaltung

627

Teil IV: Das C++-Rezeptbuch: Tipps und Lösungen für typische Aufgaben

630

21 Sichere Programmentwicklung

632

21.1 Regeln zum Design von Methoden

632

21.2 Defensive Programmierung

635

21.2.1 double- und float-Werte richtig vergleichen

636

21.2.2 const und constexpr verwenden

636

21.2.3 Anweisungen nach for/if/while einklammern

636

21.2.4 int und unsigned/size_t nicht mischen

637

21.2.5 size_t oder auto statt unsigned int verwenden

637

21.2.6 Postfix++ mit Präfix++ implementieren

638

21.2.7 Ein Destruktor darf keine Exception werfen

638

21.2.8 explicit-Typumwandlungsoperator bevorzugen

639

21.2.9 explicit-Konstruktor für eine Typumwandlung bevorzugen

639

21.2.10 Leere Standardkonstruktoren vermeiden

639

21.2.11 Mit override Schreibfehler reduzieren

639

21.2.12 Kopieren und Zuweisung verbieten

640

21.2.13 Vererbung verbieten

641

21.2.14 Überschreiben einer virtuellen Methode verhindern

641

21.2.15 The Big Three – oder Big Five?

642

21.2.16 One Definition Rule

643

21.2.17 Defensiv Objekte löschen

643

21.2.18 Speicherbeschaffung und -freigabe kapseln

643

21.2.19 Programmierrichtlinien einhalten

643

21.3 Exception-sichere Beschaffung von Ressourcen

643

21.3.1 Sichere Verwendung von unique_ptr und shared_ptr

644

21.3.2 So vermeiden Sie new und delete!

644

21.3.3 So vermeiden Sie new[] und delete[]!

645

21.3.4 shared_ptr für Arrays korrekt verwenden

645

21.3.5 unique_ptr für Arrays korrekt verwenden

646

21.3.6 Exception-sichere Funktion

646

21.3.7 Exception-sicherer Konstruktor

647

21.3.8 Exception-sichere Zuweisung

650

21.4 Empfehlungen zur Thread-Programmierung

651

21.4.1 Warten auf die Freigabe von Ressourcen

651

21.4.2 Deadlock-Vermeidung

652

21.4.3 notify_all oder notify_one?

652

21.4.4 Performance mit Threads verbessern?

653

22 Von der UML nach C++

654

22.1 Vererbung

654

22.2 Interface anbieten und nutzen

655

22.3 Assoziation

656

22.3.1 Aggregation

660

22.3.2 Komposition

660

23 Algorithmen für verschiedene Aufgaben

662

23.1 Algorithmen mit Strings

662

23.1.1 String splitten

663

23.1.2 String in Zahl umwandeln

664

23.1.3 Zahl in String umwandeln

668

23.1.4 Strings sprachlich richtig sortieren

668

23.1.5 Umwandlung in Klein- bzw. Großschreibung

670

23.1.6 Strings sprachlich richtig vergleichen

672

23.1.7 Von der Groß-/Kleinschreibung unabhängiger Zeichenvergleich

673

23.1.8 Von der Groß-/Kleinschreibung unabhängige Suche

674

23.2 Textverarbeitung

676

23.2.1 Datei durchsuchen

676

23.2.2 Ersetzungen in einer Datei

677

23.2.3 Code-Formatierer

679

23.2.4 Lines of Code (LOC) ermitteln

680

23.2.5 Zeilen, Wörter und Zeichen einer Datei zählen

682

23.2.6 CSV-Datei lesen

682

23.2.7 Kreuzreferenzliste

684

23.3 Operationen auf Folgen

687

23.3.1 Container anzeigen

687

23.3.2 Folge mit gleichen Werten initialisieren

687

23.3.3 Folge mit Werten eines Generators initialisieren

688

23.3.4 Folge mit fortlaufenden Werten initialisieren

688

23.3.5 Summe und Produkt

689

23.3.6 Mittelwert und Standardabweichung

690

23.3.7 Skalarprodukt

690

23.3.8 Folge der Teilsummen oder -produkte

691

23.3.9 Folge der Differenzen

692

23.3.10 Kleinstes und größtes Element finden

693

23.3.11 Elemente rotieren

695

23.3.12 Elemente verwürfeln

696

23.3.13 Dubletten entfernen

697

23.3.14 Reihenfolge umdrehen

699

23.3.15 Anzahl der Elemente, die einer Bedingung genügen

700

23.3.16 Gilt X für alle, keins oder wenigstens ein Element einer Folge?

701

23.3.17 Permutationen

702

23.3.18 Lexikografischer Vergleich

704

23.4 Sortieren und Verwandtes

705

23.4.1 Partitionieren

706

23.4.2 Sortieren

708

23.4.3 Stabiles Sortieren

709

23.4.4 Partielles Sortieren

710

23.4.5 Das n.-größte oder n.-kleinste Element finden

711

23.4.6 Verschmelzen (merge)

712

23.5 Suchen und Finden

715

23.5.1 Element finden

715

23.5.2 Element einer Menge in der Folge finden

716

23.5.3 Teilfolge finden

717

23.5.4 Bestimmte benachbarte Elemente finden

719

23.5.5 Bestimmte aufeinanderfolgende Werte finden

720

23.5.6 Binäre Suche

721

23.6 Mengenoperationen auf sortierten Strukturen

724

23.6.1 Teilmengenrelation

724

23.6.2 Vereinigung

725

23.6.3 Schnittmenge

726

23.6.4 Differenz

726

23.6.5 Symmetrische Differenz

727

23.7 Heap-Algorithmen

727

23.7.1 pop_heap

729

23.7.2 push_heap

730

23.7.3 make_heap

730

23.7.4 sort_heap

731

23.7.5 is_heap

731

23.8 Vergleich von Containern auch ungleichen Typs

732

23.8.1 Unterschiedliche Elemente finden

732

23.8.2 Prüfung auf gleiche Inhalte

734

23.9 Rechnen mit komplexen Zahlen: Der C++-Standardtyp complex

735

23.10 Schnelle zweidimensionale Matrix

737

23.10.1 Optimierung mathematischer Array-Operationen

740

23.11 Singleton

743

23.11.1 Implementierung mit einem Zeiger

743

23.11.2 Implementierung mit einer Referenz

744

23.11.3 Meyers' Singleton

745

23.12 Vermischtes

747

23.12.1 Erkennung eines Datums

747

23.12.2 Erkennung einer IP4-Adresse

749

23.12.3 Erzeugen von Zufallszahlen

750

23.12.4 for_each — Auf jedem Element eine Funktion ausführen

755

23.12.5 Verschiedene Möglichkeiten, Container-Bereiche zu kopieren

755

23.12.6 Vertauschen von Elementen, Bereichen und Containern

758

23.12.7 Elemente transformieren

758

23.12.8 Ersetzen und Varianten

760

23.12.9 Elemente herausfiltern

761

23.12.10 Grenzwerte von Zahltypen

763

23.12.11 Minimum und Maximum

763

24 Datei- und Verzeichnisoperationen

766

24.1 Datei oder Verzeichnis löschen

767

24.2 Datei oder Verzeichnis umbenennen

768

24.3 Verzeichnis anlegen

769

24.4 Verzeichnis anzeigen

770

24.5 Verzeichnisbaum anzeigen

771

Teil V: Die C++-Standardbibliothek

774

25 Aufbau und Übersicht

776

25.1 Auslassungen

778

25.2 Beispiele des Buchs und die C++-Standardbibliothek

780

26 Hilfsfunktionen und -klassen

782

26.1 Relationale Operatoren

782

26.2 Unterstützung der Referenzsemantik für R-Werte

783

26.2.1 move()

783

26.2.2 forward()

784

26.3 Paare

785

26.4 Tupel

787

26.5 Indexfolgen

789

26.6 Funktionsobjekte

790

26.6.1 Arithmetische, vergleichende und logische Operationen

790

26.6.2 Funktionsobjekte zum Negieren logischer Prädikate

791

26.6.3 Binden von Argumentwerten

792

26.6.4 Funktionen in Objekte umwandeln

793

26.7 Templates für rationale Zahlen

795

26.8 Hüllklasse für Referenzen

797

26.9 Type Traits

798

26.9.1 Wie funktionieren Type Traits? — ein Beispiel

799

26.9.2 Abfrage von Eigenschaften

801

26.9.3 Abfrage numerischer Eigenschaften

803

26.9.4 Typbeziehungen

803

26.9.5 Typumwandlungen

803

26.9.6 Auswahl weiterer Transformationen

804

27 Container

806

27.1 Gemeinsame Eigenschaften

808

27.1.1 Initialisierungslisten

810

27.1.2 Konstruktion an Ort und Stelle

810

27.1.3 Reversible Container

811

27.2 Sequenzen

812

27.2.1 vector

813

27.2.2 vector

814

27.2.3 list

815

27.2.4 deque

818

27.2.5 stack

819

27.2.6 queue

821

27.2.7 priority_queue

822

27.2.8 array

824

27.3 Sortierte assoziative Container

827

27.3.1 map

827

27.3.2 multimap

832

27.3.3 set

832

27.3.4 multiset

836

27.4 Hash-Container

836

27.4.1 unordered_map

838

27.4.2 unordered_multimap

843

27.4.3 unordered_set

844

27.4.4 unordered_multiset

846

27.5 bitset

847

28 Iteratoren

850

28.1 Iterator-Kategorien

851

28.1.1 Anwendung von Traits

853

28.2 distance() und advance()

855

28.3 Bereichszugriff

856

28.3.1 Reverse-Iteratoren

857

28.4 Insert-Iteratoren

858

28.5 Stream-Iteratoren

859

29 Algorithmen

862

29.1 Algorithmen mit Prädikat

863

29.1.1 Algorithmen mit binärem Prädikat

863

29.2 Übersicht

864

30 Nationale Besonderheiten

868

30.1 Sprachumgebungen festlegen und ändern

868

30.1.1 Die locale-Funktionen

871

30.2 Zeichensätze und -codierung

872

30.3 Zeichenklassifizierung und -umwandlung

876

30.4 Kategorien

876

30.4.1 collate

877

30.4.2 ctype

878

30.4.3 numeric

879

30.4.4 monetary

881

30.4.5 time

884

30.4.6 messages

886

30.5 Konstruktion eigener Facetten

887

31 String

890

32 Speichermanagement

900

32.1 unique_ptr

900

32.1.1 make_unique

902

32.2 shared_ptr

903

32.2.1 make_shared

904

32.2.2 Typumwandlung in einen Oberklassentyp

904

32.3 weak_ptr

905

32.4 new mit Speicherortangabe

906

33 Numerische Arrays (valarray)

908

33.1 Konstruktoren

909

33.2 Elementfunktionen

909

33.3 Binäre Valarray-Operatoren

912

33.4 Mathematische Funktionen

914

33.5 slice und slice_array

915

33.6 gslice und gslice_array

918

33.7 mask_array

920

33.8 indirect_array

922

34 Ausgewählte C-Header

924

34.1

925

34.2

925

34.3

926

34.4

926

34.5

927

34.6

928

34.7

928

34.8

928

34.9

930

34.10

932

A Anhang

934

A.1 ASCII-Tabelle

934

A.2 C++-Schlüsselwörter

936

A.3 Compilerbefehle

937

A.4 Rangfolge der Operatoren

938

A.5 Lösungen zu den Übungsaufgaben

939

A.6 Installation der Software für Windows

949

A.6.1 Installation des Compilers und der Entwicklungsumgebung

949

A.6.2 Integrierte Entwicklungsumgebung einrichten

950

A.6.3 De-Installation

951

A.7 Installation der Software für Linux

952

A.7.1 Installation des Compilers

952

A.7.2 Installation von Boost

953

A.7.3 Installation und Einrichtung von Code::Blocks

953

A.7.4 Beispieldateien entpacken

954

Glossar

956

Literaturverzeichnis

966

Register

970

 

© 2009-2024 ciando GmbH