Was ist der Unterschied zwischen den beiden? Ich meine, die Methoden sind alle die gleichen. Also, für einen Benutzer, Sie funktionieren identisch.
Ist das richtig???
- ich bin interessiert in iteration Leistung.. was ist schneller ierate von Anfang bis Ende?
Aus der (veraltet, aber immer noch sehr nützlich) SGI-STL Zusammenfassung der
deque
:Hier ist die Zusammenfassung auf
list
von der selben Seite:In der Zusammenfassung der Container kann haben gemeinsame Routinen, sondern die Zeit, die Garantien für diejenigen, die Routinen unterscheiden sich von container zu container. Dies ist sehr wichtig, wenn man die von dieser Behälter zu verwenden, die für eine Aufgabe: unter Berücksichtigung wie die container werden am häufigsten verwendet (z.B., mehr zum suchen als zum einfügen/löschen) geht ein langer Weg, leitet Sie an die richtigen Behälter.
Lassen Sie mich Liste nach unten zu den unterschieden:
dynamisches array, bietet random
Zugang, und hat fast die gleiche
Schnittstelle als eine vector.
doppelt verkettete Liste und nicht
bieten random-access -.
sowohl das Ende und den Anfang. Einfügen und löschen von Elementen in
die Mitte ist relativ langsam, da
alle Elemente bis auf einen der beiden
enden verschoben werden kann, um Platz zu machen oder um
eine Lücke füllen.
einschließlich der beiden enden.
andere als am Anfang oder Ende
ungültig macht, alle Zeiger, Referenzen,
und Iteratoren, die sich auf Elemente
der deque.
nicht ungültig, Zeiger, Referenzen,
und Iteratoren zu anderen Elementen.
Komplexität
constant
undamortized constant
?std::list
ist im Prinzip eine doppelt verkettete Liste.std::deque
, auf der anderen Seite implementiert ist, mehr wiestd::vector
. Es hat ständigen Zugriff auf die Zeit von index, sowie das einfügen und entfernen an Anfang und Ende, die für erheblich unterschiedliche Leistungsmerkmale als eine Liste.Nicht. Eine deque unterstützt nur O(1) einfügen und löschen an der Vorder-und Rückseite. Es kann zum Beispiel umgesetzt werden, ein Vektor mit wrap-around. Da es auch garantiert O(1) random access, können Sie sicher sein, es nutzt nicht (nur) eine doppelt verkettete Liste.
Andere wichtige Garantie ist die Art, wie die verschiedenen container speichert seine Daten im Speicher:
Beachten Sie, dass die deque wurde entwickelt, um versuchen Gleichgewicht der Vorteile von Vektor und Liste ohne deren jeweiligen Nachteile. Es ist eine besonders interessante container im Speicher begrenzt Plattformen, wie zum Beispiel mikrocontroller.
Ist der Speicher-Strategie wird jedoch oft übersehen, ist es Häufig einer der wichtigsten Gründe für die Auswahl der am meisten passenden container für eine bestimmte Anwendung.
Die performance-Unterschiede erklärt wurden, auch von anderen. Ich wollte nur hinzufügen, dass ähnliche oder sogar identische Schnittstellen sind Häufig in der objektorientierten Programmierung-Teil der Allgemeinen Methodik des Schreibens object-oriented software. Sie sollten IN KEINER WEISE davon ausgehen, dass zwei Klassen auf die gleiche Weise arbeiten, weil Sie einfach zu implementieren das gleiche interface, mehr, als Sie sollten davon ausgehen, dass ein Pferd, arbeiten wie ein Hund, weil Sie beide implementieren Angriff() und make_noise().