C++-Standardbibliothek - C++ Standard Library
In der Programmiersprache C++ ist die C++-Standardbibliothek eine Sammlung von Klassen und Funktionen , die in der Kernsprache geschrieben und Teil des C++- ISO- Standards selbst sind.
Überblick
Die C++-Standardbibliothek bietet mehrere generische Container, Funktionen zum Verwenden und Bearbeiten dieser Container, Funktionsobjekte, generische Strings und Streams (einschließlich interaktiver und Datei-I/O), Unterstützung für einige Sprachfeatures und Funktionen für alltägliche Aufgaben wie das Finden des Quadrats Wurzel einer Zahl. Die C++-Standardbibliothek enthält auch die meisten Header der ISO- C-Standardbibliothek, die mit ".h" enden, aber ihre Verwendung ist veraltet. Keine anderen Header in der C++-Standardbibliothek enden auf ".h". Funktionen der C++-Standardbibliothek werden innerhalb des std
Namespace deklariert .
Die C++-Standardbibliothek basiert auf Konventionen, die von der Standard Template Library (STL) eingeführt wurden, und wurde durch Forschungen in der generischen Programmierung und Entwickler der STL wie Alexander Stepanov und Meng Lee beeinflusst. Obwohl die C++-Standardbibliothek und die STL viele Funktionen gemeinsam haben, ist keines eine strikte Obermenge des anderen.
Ein bemerkenswertes Merkmal der C++-Standardbibliothek ist, dass sie nicht nur die Syntax und Semantik von generischen Algorithmen spezifiziert, sondern auch Anforderungen an deren Leistung stellt. Diese Leistungsanforderungen entsprechen oft einem wohlbekannten Algorithmus, der zwar erwartet, aber nicht verwendet werden muss. In den meisten Fällen ist diese lineare Zeit O erfordert ( n ) oder linearithmic Zeit O ( n log n ), aber in einigen Fällen höhere Grenzen sind erlaubt, wie beispielsweise quasilineare Zeit O ( n log 2 n ) für einen stabilen sort (zu ermöglichen in-place Sortierung zusammenführen ). Zuvor war beim Sortieren nur der Durchschnitt von O( n log n ) erforderlich , was die Verwendung von Quicksort ermöglichte , das in der Praxis schnell ist, aber eine schlechte Worst-Case-Leistung aufweist, aber Introsort wurde eingeführt, um sowohl eine schnelle durchschnittliche Leistung als auch eine optimale Worst-Case-Leistung zu ermöglichen. Fallkomplexität, und ab C++11 ist die Sortierung garantiert im schlimmsten Fall linearithmisch. In anderen Fällen bleiben die Anforderungen lockerer, wie z. B. die Auswahl , die nur im Durchschnitt linear sein muss (wie bei Quickselect ), nicht aber im schlimmsten Fall linear wie bei introselect .
Die C++-Standardbibliothek wurde im Rahmen der C++-ISO-Standardisierungsbemühungen einer ISO-Standardisierung unterzogen und wird derzeit an der Standardisierung der erweiterten Funktionalität weitergearbeitet.
Implementierungen
GNU C++-Standardbibliothek (libstdc++)
Die Bibliothek ist Teil der GCC- Quellen [1] und wird als GPLv3 veröffentlicht, mit der Ausnahme, Closed-Source-Anwendungen zu verknüpfen, wenn sie mit GCC erstellt wurden [2] . Die aktuelle Version ist 11.
Microsoft C++-Standardbibliothek (STL)
Auf der CppCon 2019 am 16. September 2019 hat Microsoft die Veröffentlichung der Implementierung der C++ Standard Library (auch bekannt als STL) als Open Source bekannt gegeben . Es wird auf GitHub gehostet und unter der Apache License 2.0 mit LLVM- Ausnahme lizenziert .
Apache C++-Standardbibliothek
Die Apache C++ Standard Library ist eine weitere Open-Source-Implementierung. Es wurde ursprünglich von Rogue Wave Software kommerziell entwickelt und später an die Apache Software Foundation gespendet . Nach mehr als fünf Jahren ohne Release beschloss der Vorstand der Apache Software Foundation jedoch, dieses Projekt zu beenden und auf Apache Attic zu verschieben .
LLVM C++-Standardbibliothek
Das LLVM- Projekt umfasst eine Implementierung der C++-Standardbibliothek namens libc++ , die unter der MIT-Lizenz und der UIUC-Lizenz doppelt lizenziert ist . Seit v9.0.0 wurde es auf die Apache License 2.0 mit LLVM-Ausnahmen relizenziert .
Standard-Header
Die folgenden Dateien enthalten die Deklarationen der C++ Standard Library.
Behälter
- <array>
- Neu in C++11 und TR1 . Stellt die Containerklassenvorlage bereit
std::array
, einen Container für ein Array mit fester Größe. - <Bitsatz>
- Stellt die spezialisierte Containerklasse
std::bitset
, ein Bit-Array , bereit . - <deque>
- Stellt die Containerklassenvorlage bereit
std::deque
, eine doppelseitige Warteschlange . - <forward_list>
- Neu in C++11 und TR1 . Stellt die Containerklassenvorlage bereit
std::forward_list
, eine einzeln verknüpfte Liste . - <Liste>
- Stellt die Containerklassenvorlage bereit
std::list
, eine doppelt verknüpfte Liste . - <Karte>
- Stellt die Containerklassenvorlagen
std::map
und dasstd::multimap
sortierte assoziative Array und die Multimap bereit . - <Warteschlange>
- Stellt die Containeradapterklasse
std::queue
, eine Single-Ended- Warteschlange undstd::priority_queue
eine Prioritätswarteschlange bereit . - <set>
- Stellt die Containerklassenvorlagen
std::set
undstd::multiset
sortierte assoziative Container oder Sets bereit . - <stapel>
- Stellt die Containeradapterklasse
std::stack
, einen Stack , bereit . - <unordered_map>
- Neu in C++11 und TR1 . Bietet die Container - Klasse - Vorlage
std::unordered_map
undstd::unordered_multimap
, Hash - Tabellen . - <ungeordnetes_set>
- Neu in C++11 und TR1 . Stellt die Containerklassenvorlage
std::unordered_set
undstd::unordered_multiset
. - <Vektor>
- Stellt die Containerklassenvorlage bereit
std::vector
, ein dynamisches Array .
Allgemeines
- <Algorithmus>
- Stellt Definitionen vieler Containeralgorithmen bereit .
- <chrono>
- Stellt Zeitelemente wie
std::chrono::duration
,std::chrono::time_point
, und Uhren bereit.
- <funktional>
- Stellt mehrere Funktionsobjekte bereit , die für die Verwendung mit den Standardalgorithmen entwickelt wurden.
- <Iterator>
- Stellt Klassen und Vorlagen für die Arbeit mit Iteratoren bereit .
- <Speicher>
- Bietet Funktionen für die Speicherverwaltung in C++, einschließlich der Klassenvorlage
std::unique_ptr
. - <stdaußer>
- Enthält Standardausnahmeklassen wie
std::logic_error
undstd::runtime_error
, beide abgeleitet vonstd::exception
. - <Tupel>
- Neu in C++11 und TR1. Stellt eine Klassenvorlage
std::tuple
, ein Tupel , bereit . - <Dienstprogramm>
- Stellt die Template-Klasse
std::pair
zum Arbeiten mit Objektpaaren (Zwei-Member- Tupel ) und den Namespacestd::rel_ops
zum leichteren Überladen von Operatoren bereit .
Lokalisierung
- <Gebietsschema>
- Definiert Klassen und deklariert Funktionen, die die einem Gebietsschema eigenen Informationen kapseln und manipulieren .
- <codecvt>
- Stellt Codekonvertierungsfacetten für verschiedene Zeichencodierungen bereit.
Saiten
- <string>
- Stellt den Standard C ++ String - Klassen und Vorlagen.
- <regex>
- Neu in C++11 . Stellt Dienstprogramme für den Mustervergleich von Zeichenfolgen mit regulären Ausdrücken bereit .
Streams und Input/Output
- <fstream>
- Bietet Möglichkeiten für dateibasierte Ein- und Ausgabe. Siehe fstream .
- <iomanip>
- Bietet Möglichkeiten zum Bearbeiten der Ausgabeformatierung, z. B. die beim Formatieren von Ganzzahlen verwendete Basis und die Genauigkeit von Gleitkommawerten .
- <ios>
- Bietet verschiedene Typen und Funktionen, die für den Betrieb von iostreams grundlegend sind.
- <iosfwd>
- Stellt Vorwärtsdeklarationen mehrerer I/O-bezogener Klassenvorlagen bereit.
- <iostream>
- Bietet C++-Eingabe- und -Ausgabegrundlagen. Siehe iostream .
- <istream>
- Stellt die Vorlagenklasse
std::istream
und andere unterstützende Klassen für die Eingabe bereit. - <ostream>
- Stellt die Vorlagenklasse
std::ostream
und andere unterstützende Klassen für die Ausgabe bereit. - <stream>
- Stellt die Vorlagenklasse
std::stringstream
und andere unterstützende Klassen für die Zeichenfolgenbearbeitung bereit. - <streambuf>
- Bietet Lese- und Schreibfunktionen für/von bestimmten Arten von Zeichenfolgen, wie z. B. externe Dateien oder Zeichenfolgen.
Sprachunterstützung
- <Ausnahme>
- Stellt verschiedene Typen und Funktionen im Zusammenhang mit der Ausnahmebehandlung bereit , einschließlich
std::exception
, der Basisklasse aller von der Standardbibliothek ausgelösten Ausnahmen. - <Grenzen>
- Stellt die Vorlagenklasse bereit
std::numeric_limits
, die zum Beschreiben von Eigenschaften grundlegender numerischer Typen verwendet wird. - <memory_resource>
- In C++17 hinzugefügt . Bietet Möglichkeiten zum Erstellen polymorpher Speicherzuordner, deren Verhalten sich zur Laufzeit ändern kann.
- <neu>
- Stellt Operatoren
new
unddelete
andere Funktionen und Typen bereit, die die Grundlagen der C++- Speicherverwaltung bilden . - <Typinfo>
- Bietet Möglichkeiten zum Arbeiten mit C++- Laufzeittypinformationen .
- <Version>
- In C++20 hinzugefügt . Stellt Informationen zur Implementierung der C++-Standardbibliothek bereit.
Thread-Support-Bibliothek
- <thread>
- Neu in C++11 . Geben Sie Klasse und Namespace für die Arbeit mit Threads an.
- <mutex>
- Neu in C++11 . 30.4-1. Dieser Abschnitt enthält Mechanismen zum gegenseitigen Ausschluss: Mutexe, Sperren und einmaliges Aufrufen.
- <condition_variable>
- Neu in C++11 . 30.5-1. Bedingungsvariablen stellen Synchronisationsprimitive bereit, die verwendet werden, um einen Thread zu blockieren, bis von einem anderen Thread benachrichtigt wird, dass eine Bedingung erfüllt ist oder bis eine Systemzeit erreicht ist.
- <Zukunft>
- Neu in C++11 . 30.6.1-1. Beschreibt Komponenten, die ein C++-Programm verwenden kann, um in einem Thread das Ergebnis (Wert oder Ausnahme) einer Funktion abzurufen, die in demselben Thread oder einem anderen Thread ausgeführt wurde.
Numerische Bibliothek
Komponenten, die C++-Programme verwenden können, um halbnumerische Operationen auszuführen.
- <komplex>
- Der Header <complex> definiert eine Klassenvorlage und zahlreiche Funktionen zur Darstellung und Manipulation komplexer Zahlen.
- <zufällig>
- Möglichkeit zur Generierung von (Pseudo-)Zufallszahlen
- <valarray>
- Definiert fünf Klassenvorlagen (valarray, Slice_array, gslice_array, mask_array und indirect_array), zwei Klassen (slice und gslice) und eine Reihe verwandter Funktionsvorlagen zum Darstellen und Manipulieren von Arrays von Werten.
- <numerisch>
- Verallgemeinerte numerische Operationen.
C-Standardbibliothek
Jeder Header aus der C-Standardbibliothek ist in der C++-Standardbibliothek unter einem anderen Namen enthalten, der durch Entfernen des .h und Hinzufügen eines 'c' am Anfang generiert wird; aus 'time.h' wird beispielsweise 'ctime'. Der einzige Unterschied zwischen diesen Headern und den herkömmlichen Headern der C-Standardbibliothek besteht darin, dass die Funktionen nach Möglichkeit im std::-Namespace platziert werden sollten. In ISO C dürfen Funktionen in der Standardbibliothek durch Makros implementiert werden , was von ISO C++ nicht erlaubt ist.
Siehe auch
- Apache C++-Standardbibliothek
- Boost (C++-Bibliotheken)
- C POSIX-Bibliothek
- C-Standardbibliothek
- Standardbibliothek
- Technischer C++-Bericht 1
Verweise
Weiterlesen
- Stroustrup, Bjarne. Die Programmiersprache C++ . Addison-Wesley . ISBN 978-0321563842.
- Josuttis, Nicolai. Die C++-Standardbibliothek - Ein Tutorial und eine Referenz . Addison-Wesley . ISBN 978-0-321-62321-8.
- Van Weert, Peter; Gregor, Marc. C++-Standardbibliothek – Kurzreferenz . Apress . ISBN 978-1484218754.
Externe Links
- Referenz zur C++-Standardbibliothek
- Referenz zur Microsoft C++-Standardbibliothek
- Rogue Wave SourcePro C++-Dokumentation
- Apache C++ Standard Library Wiki , eingestellt am 15. Mai 2014 (basierend auf der Rogue Wave C++ Standard Library 4.1.0)
- Dokumentation zur STLport C++-Standardbibliothek
- Die Online-Dokumentation der GNU C++-Bibliothek
- Dokumentation zur LLVM/Clang C++-Standardbibliothek