was ist die zugrunde liegende Datenstruktur der STL-Liste, Vektor und einstellen?
was ist die zugrunde liegende Datenstruktur der STL-Liste, Vektor und einstellen ?
Meine Lösung:
- Vektor : (dynamisch zugewiesene) array
- Liste: ?
- set: heap (oder einen binären Baum mit allen Blatt-Knoten befindet sich Links wie möglich und halten Sie min/max-element auf der Oberseite)
Recht?
- Umsetzung definiert, aber im Allgemeinen
std::vector
ist eines dynamisch reservierten Arrays.std::list
ist eine doppelt verkettete Liste (C++11 führtstd::forward_list
ist eine einfach verkettete Liste), und eineset
basieren in der Regel auf rot-schwarz-Bäume, wenn nichts passt, dass die amortisierten Komplexität und Verhalten-Anforderungen an die Schnittstellen in der Norm definiert sind akzeptabel Implementierungen.
InformationsquelleAutor user1002288 | 2011-10-26
Schreibe einen Kommentar Antworten abbrechen
Du musst angemeldet sein, um einen Kommentar abzugeben.
Basierend auf Kommentare, um zu klären, diese sind die am häufigsten verwendeten Optionen, aber basierend auf den gewünschten Komplexität und anderer Faktoren, die Unterstützung von diese Implementierungen können variieren:
Vektor = dynamisch Größenänderung array
Liste = Doppelt Verkettete Liste
Set = Rot/Schwarz-Baum (ausgeglichener Binärer Suchbaum)
Ich glaube, Sie könnte möglicherweise mischen Haufen und BSTs. Ein heap ist visualisiert, wie ein Baum, aber es ist eigentlich basiert auf einer Wendeplatten-Verzeichnis-Struktur (z.B. array-oder vector). C++ - heap-Funktionen über die Algorithmus header in der STL . BSTs sind eher ein Schlüssel/Wert-basierte Struktur zur effizienten lookup (das ist, was Sie wollen in der Regel für ein Satz).
std::unordered_set
nicht. Ein doppelt verkettete Liste ist eine Gruppe von Knoten, die Verweise auf die Knoten davor und danach (oderNULL
).std::list
unterstützt bidirektionale Iteratoren und--
muss Konstante Zeit. Plus die andere zeitliche Einschränkungen, es wäre eine Herausforderung zu implementieren, die Liste nicht eine doppelt-verkettete Liste.set
, die leicht implementiert werden zahlreiche Möglichkeiten 🙂Der standard gibt keine Garantien, auf welche Datenstrukturen verwendet werden, gibt es nur die Komplexität garantiert, so dass die Umsetzung können Sie wählen Sie eine Struktur, die erfüllt Sie.
Sagte,
std::vector
ist in der Regel eine dynamische array,std::list
ist wahrscheinlich ein doppelt verknüpfte Liste undstd::set
ist meist irgendeine Art von self-balancing binary tree.