Dieser Artikel befasst sich mit allgemeinen Fragen zu den STL -Containern der Standard -Vorlagenbibliothek (STL) in c. Wir werden verschiedene Containertypen, Auswahlkriterien, Leistungsabschreibungen und typische Anwendungsfälle untersuchen.
Die STL bietet eine Vielzahl von Containertypen, die jeweils für bestimmte Anwendungsfälle ausgelegt sind. Am häufigsten sind:
std::vector
: Ein dynamisches Array, das eine zusammenhängende Speicherzuweisung bietet. Elemente werden mit ihrem Index (Zufallszugriff) zugegriffen. Einfügung und Löschung am Ende sind effizient (amortisierte konstante Zeit), die Operationen in der Mitte sind jedoch langsam (lineare Zeit), da sie nachfolgende Elemente verschoben werden müssen. Verwenden Sie std::vector
, wenn:
std::list
: Eine doppelt verknüpfte Liste, in der jedes Element Hinweise auf seinen Vorgänger und Nachfolger speichert. Einfügen und Löschen überall in der Liste sind effizient (konstante Zeit), der Zufallszugriff ist jedoch langsam (lineare Zeit). Verwenden Sie std::list
, wenn:
std::map
: Ein assoziativer Container, der Schlüsselwertpaare speichert, sortiert nach Schlüssel. Es bietet eine effizientes, schlüsselles Such-Lookup (logarithmische Zeit) unter Verwendung einer baumartigen Struktur (typischerweise ein rotschwarzer Baum). Verwenden Sie std::map
, wenn:
std::set
: Ähnlich wie bei std::map
, aber nur einzigartige Schlüssel ohne zugehörige Werte gespeichert. Es bietet auch eine effiziente schlüssellbasierte Lookup (logarithmische Zeit). Verwenden Sie std::set
wann:
std::unordered_map
und std::unordered_set
: Dies sind Container auf Hash-Tabellenbasis, die durchschnittliche Komplexität der Konstante Zeit für Insertion, Löschung und Suche bieten. Die schlimmste Fallkomplexität kann jedoch linear sein. Verwenden Sie diese wann:
Die Auswahl des richtigen Containers hängt stark von den spezifischen Anforderungen Ihrer Aufgabe ab. Betrachten Sie diese Faktoren:
std::map
, std::set
oder std::vector
angemessen sein. Wenn nicht, kann std::unordered_map
oder std::unordered_set
schneller sein.Die wichtigsten Kompromisse zwischen Leistungsleistung liegen zwischen:
std::vector
bietet einen schnellen Zufallszugriff (o (1)), während std::list
nicht (o (n)) tut.std::vector
ist langsam (o (n)), während es in einer std::list
(o (1)) schnell ist.std::map
und std::set
Angebot logarithmischer Suchzeit (o (log n)), während std::unordered_map
und std::unordered_set
durchschnittliche Konstantzeitsuche (o (1)) anbieten. std::vector
und std::list
erfordern eine lineare Suche (o (n)), es sei denn, Sie haben einen sortierten std::vector
.std::vector
: Speichern Sie eine Abfolge von Elementen, die ein dynamisches Array darstellt, Stapel oder Warteschlangen (falls nur das Ende verwendet) und speichern Sie Spielboarddaten.std::list
: Implementierung einer Warteschlange oder einer Doppel-Warteschlange, bei der eine Aktionsgeschichte aufrechterhalten und eine Wiedergabeliste dargestellt werden.std::map
: Speichern Sie eine Wörterbuch- oder Symboltabelle, die die Adjazenzliste eines Diagramms darstellt, Spielcharakterattribute verwalten.std::set
: Speichern Sie eine Reihe einzigartiger Kennungen, Implementierung einer einzigartigen Sammlung von Elementen, Überprüfung auf das Vorhandensein eines Elements.std::unordered_map
und std::unordered_set
: Implementierung schneller Lookups in einer Hash -Tabelle, zwischen den Daten, die häufig auf Daten zugegriffen werden, und die Adjazenzliste eines Diagramms darstellt, wenn die Reihenfolge nicht wichtig ist.Wenn Sie diese Faktoren und Kompromisse sorgfältig berücksichtigen, können Sie den am besten geeigneten STL-Container für Ihre spezifische Programmieraufgabe auswählen, was zu effizienterem und wartbarerem Code führt.
Das obige ist der detaillierte Inhalt vonWas sind die verschiedenen Arten von Containern in der STL (Vektor, Liste, Karte, Set usw.) und wann sollte ich sie verwenden?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!