Skip to main content

1999 | Buch

Die C++-Standardbibliothek

Einführung und Nachschlagewerk

verfasst von: Dr. Stefan Kuhlins, Prof. Dr. Martin Schader

Verlag: Springer Berlin Heidelberg

Buchreihe : Objekttechnologie

insite
SUCHEN

Inhaltsverzeichnis

Frontmatter
1. Vorbemerkungen
Zusammenfassung
Vorab möchten wir auf einige Neuerungen wie den Namensbereich std und die Benennung von Header-Dateien aufmerksam machen. Außerdem stellen wir kanonische Klassen und die O-Notation vor.
Stefan Kuhlins, Martin Schader
2. Konzeption und Entwicklung der STL
Zusammenfassung
Die Standard Template Library (STL) ist zwar nur ein Teil der C++-Standardbibliothek, aber sicherlich der interessanteste. Zum Verständnis der Arbeitsweise und des Zusammenspiels der einzelnen Bausteine der STL ist die eingehende Betrachtung eines möglichen Entwicklungsweges äußerst hilfreich. Im folgenden werden wir deshalb zwei einfache Containerklassen Feld und Liste implementieren, in denen nach bestimmten Objekten gesucht werden kann. Ausgehend von einem objektorientierten Entwurf wird der schrittweise Übergang zur „generischen“ Programmierung im Sinne der STL nachvollzogen.
Stefan Kuhlins, Martin Schader
3. Funktionsobjekte
Zusammenfassung
Ein Funktionsobjekt ist ein Objekt, für das der Funktionsaufrufoperator operator() definiert ist. Somit sind Zeiger auf Funktionen und Objekte von Klassen, die operator() überladen, Funktionsobjekte. In diesem Zusammenhang werden Klassen, die operator() überladen, auch vereinfacht als „Funktionsobjekte“ bezeichnet.
Stefan Kuhlins, Martin Schader
4. Hilfsmittel
Zusammenfassung
In diesem Kapitel werden einige grundlegende Komponenten der Standardbibliothek vorgestellt, die von anderen Komponenten benutzt werden.
Stefan Kuhlins, Martin Schader
5. Container
Zusammenfassung
Container sind Behälter, die Objekte des gleichen Typs aufnehmen und verwalten können. Bei der Aufnahme eines Objekts in einen Container der Standardbibliothek wird das Objekt kopiert, dazu muß es copy-constructible und assignable sein (siehe Seite 3). Die Kopie befindet sich dann im Besitz des Containers und kann nicht länger existieren als der Container selbst. Dies bietet die Vorteile, daß die Speicherverwaltung automatisch erfolgt und daß die Typsicherheit gewährleistet ist. Nachteilig wirkt sich aus, daß ein Objekt nicht im „Original“ in einem Container enthalten sein kann und daß mit Kopien kein Polymorphismus möglich ist — dafür benötigt man Zeiger oder Referenzen. Wie wir in Kapitel 14 zeigen werden, können aber auch Zeiger verwaltet werden, so daß sich diese Einschränkungen umgehen lassen.
Stefan Kuhlins, Martin Schader
6. Containeradapter
Zusammenfassung
Ein Containeradapter definiert — basierend auf einer vorhandenen Containerschnittstelle — eine neue Schnittstelle, die gegenüber dem zugrundeliegenden Container stark eingeschränkt ist. Insbesondere besitzen Containeradapter keine Iteratoren. Der Zugriff auf ihre Elemente ist deshalb nur über ihre Elementfunktionen möglich.
Stefan Kuhlins, Martin Schader
7. Assoziative Container
Zusammenfassung
Die assoziativen Container der Standardbibliothek erlauben einen effizienten Zugriff auf die in ihnen enthaltenen Elemente über Schlüssel, wobei die typischen Operationen mit logarithmischem Aufwand verbunden sind. Zur Standardbibliothek gehören die assoziativen Containerklassen set, multiset, map und multimap.
Stefan Kuhlins, Martin Schader
8. Iteratoren
Zusammenfassung
Iteratoren verbinden Container und Algorithmen. Sie stellen eine abstrakte Schnittstelle für den einheitlichen Zugriff auf Containerdaten zur Verfügung, so daß sich einerseits Algorithmen nicht mit den Details einzelner Datenstrukturen beschäftigen müssen und andererseits Container von der Bereitstellung zahlreicher Elementfunktionen befreit werden.
Stefan Kuhlins, Martin Schader
9. Algorithmen
Zusammenfassung
Die Mächtigkeit der Standardbibliothek beruht in erster Linie auf ihren Algorithmen, die mit Hilfe von Iteratoren vielfältige Datenstrukturen (insbesondere Container) bearbeiten können. Bis auf die numerischen Algorithmen aus Abschnitt 9.11 sind alle Algorithmen in der Header-Datei <algorithm> definiert.
Stefan Kuhlins, Martin Schader
10. Allokatoren
Zusammenfassung
Allokatoren erleichtern die Speicherverwaltung, weil sie unter einer standardisierten Schnittstelle die Details des physischen Speichers verbergen. Allokatoren stellen Informationen über Speichermodelle wie die Typen für Zeiger und Referenzen sowie Operationen zum Reservieren und Freigeben von Speicher zur Verfügung. Alle Container der Standardbibliothek sind in bezug auf einen Allokator parametrisiert. Der von einem Container verwendete Allokator kann mit der Elementfunktion get_allocator ermittelt werden (siehe Seite 59).
Stefan Kuhlins, Martin Schader
11. Strings
Zusammenfassung
Der Typ string gehört zwar nicht zur STL, ist aber ein wichtiger Bestandteil der C++-Standardbibliothek. Es gibt wohl kaum ein größeres Programm, das ohne die Bearbeitung von Zeichenketten (Strings) auskommt. Zeichenketten werden u.a. für Namen, Anschriften und Texte aller Art benötigt. C++ benutzt wie C für Zeichenketten den Datentyp Feld von char bzw. Zeiger auf char. Die Arbeit mit solchen nullterminierten C-Strings ist umständlich, weil der Speicher selbst zu verwalten ist und für Standardoperationen, wie z.B. das Anhängen eines C-Strings an einen anderen, spezielle Bibliotheksfunktionen aufzurufen sind.
Stefan Kuhlins, Martin Schader
12. Streams
Zusammenfassung
Die Grundidee des Streamkonzepts ist die Umwandlung beliebiger Werte oder Objekte in Zeichenfolgen und umgekehrt. Unter einem Stream ist dabei der abstrakte Datenstrom von einer Quelle zu einer Senke zu verstehen. In der Ausgabeanweisung cout « x; ist beispielsweise x die Quelle und das Streamobjekt cout die Senke. Die Anweisung wandelt den Wert von x aus seiner internen Bitmusterdarstellung in eine lesbare Textzeichenfolge um und gibt diese über die Standardausgabe aus. Bei einer Eingabeanweisung der Form cin » y; ist dagegen cin die Quelle, und das Objekt y ist die Senke. Die Daten „fließen“ jeweils in Richtung auf das Ziel, auf das die Ein- und Ausgabeoperatoren « bzw. » zeigen.
Stefan Kuhlins, Martin Schader
13. Weitere Komponenten der C++-Standardbibliothek
Zusammenfassung
In diesem Kapitel stellen wir die Bibliotheksklassen auto_ptr, bitset, vector<bool>, complex, numeric_limits und vatarray vor.
Stefan Kuhlins, Martin Schader
14. Zeiger in Containern verwalten
Zusammenfassung
In einem Container können nicht nur Objekte einer einzigen Klasse, sondern auch Objekte verschiedener Klassen verwaltet werden. Voraussetzung ist dabei, daß die Klassen eine gemeinsame Basisklasse besitzen, so daß der Container Zeiger auf die Basisklasse speichert. (Darüber hinaus lassen sich mittels void* sogar Objekte, die überhaupt keine Gemeinsamkeiten aufweisen, in einem Container ablegen. Allerdings wird in dem Fall die Typprüfung außer Kraft gesetzt, und polymorphe Aufrufe virtueller Elementfunktionen sind nicht mehr möglich.)
Stefan Kuhlins, Martin Schader
15. Lösungen
Zusammenfassung
In diesem Kapitel präsentieren wir unsere Lösungsvorschläge zu den jeweils an den Kapitelenden gestellten Aufgaben. Wie im Vorwort beschrieben, können Sie den Sourcecode zu sämtlichen Lösungen und Programmen erhalten.
Stefan Kuhlins, Martin Schader
Backmatter
Metadaten
Titel
Die C++-Standardbibliothek
verfasst von
Dr. Stefan Kuhlins
Prof. Dr. Martin Schader
Copyright-Jahr
1999
Verlag
Springer Berlin Heidelberg
Electronic ISBN
978-3-662-06640-9
Print ISBN
978-3-540-65052-2
DOI
https://doi.org/10.1007/978-3-662-06640-9