C++: Einführung und Verwendung von Deque

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

  1. dequeEs handelt sich um einen kontinuierlichen linearen Raum mit Öffnungen in beide Richtungen vectorund einen kontinuierlichen linearen Raum mit Öffnungen in eine Richtung.
  2. Für Deque-Objekte ist es effizienter, Elemente an beiden Enden der Warteschlange einzufügen und zu löschen, und vectores ist effizienter, Elemente am Ende der Sequenz einzufügen und zu löschen.
  3. Deque ermöglicht das Einfügen und Löschen von Elementen am Anfang der Sequenz in konstanter Zeit und dequeverfügt nicht über alle capacity()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 dequeauch 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, vectoranstelle von deque. dequeDie Sortieroperation von kann vollständig in a kopiert vector, mithilfe der Sortieroperation in STL vectorsortiert und dann zurückkopiert werden deque.

dequeEs 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 vectornicht 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 vectorso gut ;

Das Einfügen und Löschen kann intern erfolgen, die Leistung ist jedoch nicht listso gut .

dequeDer Elementzugriff und die Iteratoroperationen werden etwas langsamer sein, da es in der internen Struktur einen zusätzlichen Indirektionsprozess gibt;

dequeDer Iterator von ist ein spezieller intelligenter Zeiger, der zwischen verschiedenen Blöcken springen kann.

dequeDie Kontrolle über den Zeitpunkt der Kapazitäts- und Speicherzuweisung wird nicht unterstützt.

dequeDie Neuzuweisung von Speicher ist besser, vectorda intern nicht alle Elemente kopiert werden müssen.

dequeEin 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.

Guess you like

Origin blog.csdn.net/qq_33021529/article/details/123997973