Nun, die Schüler meiner Klasse scheinen mir nicht erklären zu können, wann es effektiver ist, Vektoren zu verwenden, aber sie sehen ziemlich glücklich aus, wenn sie mir raten, Listen zu verwenden.
So verstehe ich es
Listen : Jedes Element enthält eine Adresse zum nächsten oder vorherigen Element. Mit dieser Funktion können Sie die Elemente zufällig sortieren, auch wenn sie nicht sortiert sind. Die Reihenfolge ändert sich nicht: Es ist effizient, wenn Ihr Speicher fragmentiert ist. Es hat aber auch einen anderen sehr großen Vorteil: Sie können Elemente einfach einfügen / entfernen, da Sie nur einige Zeiger ändern müssen. Nachteil: Um ein zufälliges einzelnes Element zu lesen, müssen Sie von einem Element zum anderen springen, bis Sie die richtige Adresse gefunden haben.
Vektoren : Bei Verwendung von Vektoren ist der Speicher viel besser organisiert als bei regulären Arrays: Jedes n-te Element wird unmittelbar nach dem (n-1) Element und vor dem (n + 1) Element gespeichert. Warum ist es besser als Liste? Weil es einen schnellen Direktzugriff ermöglicht. So geht's: Wenn Sie die Größe eines Elements in einem Vektor kennen und wenn diese im Speicher zusammenhängend sind, können Sie leicht vorhersagen, wo sich das n-te Element befindet. Sie müssen nicht alle Elemente einer Liste durchsuchen, um das gewünschte Element zu lesen. Mit Vektor lesen Sie es direkt und mit einer Liste, die Sie nicht lesen können. Andererseits ist das Ändern des Vektorarrays oder das Ändern eines Werts viel langsamer.
Listen sind besser geeignet, um Objekte zu verfolgen, die im Speicher hinzugefügt / entfernt werden können. Vektoren sind besser geeignet, wenn Sie von einer großen Anzahl einzelner Elemente auf ein Element zugreifen möchten.
Ich weiß nicht, wie Listen optimiert werden, aber Sie müssen wissen, dass Sie, wenn Sie einen schnellen Lesezugriff wünschen, Vektoren verwenden sollten, da die STL-Verbindungslisten beim Lesezugriff nicht so schnell sind wie bei Vektoren.