Einführung und Verwendung von Deque
deque (doppelendige Warteschlange) ist eine doppelendige Warteschlange, die sehr praktisch ist, unabhängig davon, ob Elemente am Ende oder am Kopf eingefügt werden. Das Einfügen von Elementen in der Mitte ist aufwändiger, da andere Elemente in der Mitte verschoben werden müssen.
Die doppelendige Warteschlange ist ein Datentyp mit wahlfreiem Zugriff, der schnelle Einfüge- und Löschfunktionen an beiden Enden der Sequenz bereitstellt. Sie kann bei Bedarf ihre Größe ändern und alle Funktionen der Warteschlange in der Standard-C++-Datenstruktur ausführen.
Der Unterschied zwischen Deque und Vektor
deque
Es handelt sich um einen kontinuierlichen linearen Raum mit Öffnungen in beide Richtungenvector
und einen kontinuierlichen linearen Raum mit Öffnungen in eine Richtung.- Für Deque-Objekte ist es effizienter, Elemente an beiden Enden der Warteschlange einzufügen und zu löschen, und
vector
es ist effizienter, Elemente am Ende der Sequenz einzufügen und zu löschen. - Deque ermöglicht das Einfügen und Löschen von Elementen am Anfang der Sequenz in konstanter Zeit und
deque
verfügt nicht über allecapacity()
Konzepte. Es besteht dynamisch aus segmentierten kontinuierlichen Räumen, und ein neues Raumsegment kann jederzeit hinzugefügt und verknüpft werden. Aufgrund des unzureichenden alten Speicherplatzes konfiguriert Vector einen größeren Speicherplatz neu, kopiert dann Elemente und gibt dann den alten Speicherplatz frei, bei dem es sich um den Speicherplatzreservierungsmechanismus handelt.
Obwohl deque
auch ein Iterator mit wahlfreiem Zugriff bereitgestellt wird , ist sein Iterator kein gewöhnlicher Zeiger und seine Komplexität ist hoch. Daher sollten Sie, sofern nicht erforderlich, vector
anstelle von deque
. deque
Die Sortieroperation von kann vollständig in a kopiert vector
, mithilfe der Sortieroperation in STL vector
sortiert und dann zurückkopiert werden deque
.
deque
Es besteht normalerweise aus einigen unabhängigen Blöcken, der erste Block dehnt sich in eine Richtung aus und der letzte Block dehnt sich in eine andere Richtung aus. Es ermöglicht einen schnelleren Direktzugriff, speichert aber vector
nicht alle Objekte in einem zusammenhängenden Speicherblock, sondern verfügt über mehrere zusammenhängende Speicherblöcke und verfolgt diese Blöcke und ihre Reihenfolge in einer Zuordnungsstruktur.
1. Konstrukteur
#include<deque>
deque<type> deq; //声明一个元素类型为 type 的双端队列 deq
deque<type> deq(nSize); //声明含有 nSize 个默认初始化元素的 deq
deque<type> deq(nSize, value) //声明含有 nSize 个值为 value 的元素的deq
deque<type> deq(MyDeque); //复制MyDeque到deq
deque<type> deq(first, last); //使用迭代器first,last范围内的元素初始化deq
2. Häufig verwendete Mitgliedsfunktionen
deq[nPos]; //访问双向序列中 nPos 位置上的元素
deq.front(); //返回第一个元素
deq.back(); //返回最后一个元素
deq.push_front(x); //把元素 x 插入到 deq 的头部
deq.pop_front(); //弹出 deq 的第一个元素
deq.push_back(x); //把元素 x 插入到 deq 的尾部
deq.pop_back(); //弹出 deq 的最后一个元素
3. Funktionen
[]
Unterstützt at()
Direktzugriff mit und , aber die Leistung ist nicht vector
so gut ;
Das Einfügen und Löschen kann intern erfolgen, die Leistung ist jedoch nicht list
so gut .
deque
Der Elementzugriff und die Iteratoroperationen werden etwas langsamer sein, da es in der internen Struktur einen zusätzlichen Indirektionsprozess gibt;
deque
Der Iterator von ist ein spezieller intelligenter Zeiger, der zwischen verschiedenen Blöcken springen kann.
deque
Die Kontrolle über den Zeitpunkt der Kapazitäts- und Speicherzuweisung wird nicht unterstützt.
deque
Die Neuzuweisung von Speicher ist besser, vector
da intern nicht alle Elemente kopiert werden müssen.
deque
Ein Speicherblock wird freigegeben, wenn er nicht mehr verwendet wird. Der Mechanismus hängt jedoch von der tatsächlichen Operation ab, ob die Versionierung erzwungen wird.