deque
-Klasse
Ordnet Elemente eines angegebenen Typs in einer linearen Anordnung an, und aktiviert, wie ein Vektor, schnellen zufälligen Zugriff auf jedes Element sowie effizientes Einfügen und Löschen auf der Rückseite des Containers. Im Gegensatz zu einem Vektor, unterstützt die deque
-Klasse allerdings auch das effiziente Einfügen und Löschen im Vordergrund des Containers.
Syntax
template <class Type, class Allocator =allocator<Type>>
class deque
Parameter
Type
Der in deque
zu speichernde Elementdatentyp.
Allocator
Der Typ, der das gespeicherte Allocatorobjekt darstellt, das Details zur deque
Zuordnung und Zuordnung des Speichers kapselt. Dieses Argument ist optional, und der Standardwert ist allocator<Type>
.
Hinweise
Die Auswahl des Containertyps sollte im Allgemeinen auf Grundlage des für die Anwendung erforderlichen Suchen und Einfügetyps erfolgen. Vectors
sollte der bevorzugte Container für die Verwaltung einer Sequenz sein, wenn der zufällige Zugriff auf jedes Element zu einem Premium-Element erfolgt und Einfügungen oder Löschungen von Elementen nur am Ende einer Sequenz erforderlich sind. Die Leistung des list-Containers ist optimal, wenn Elemente konstant an jeder Stelle innerhalb der Sequenz effizient eingefügt und gelöscht werden können. Solche Vorgänge in der Mitte der Sequenz benötigen Elementkopien und -Zuweisungen, die zur Anzahl von Elementen in der Sequenz proportional sind (lineare Zeit).
Deque
Die Neuverteilung tritt auf, wenn eine Memberfunktion Elemente der Sequenz einfügen oder löschen muss:
Wenn ein Element in eine leere Sequenz eingefügt wird oder ein Element gelöscht wird, um eine leere Sequenz zu verlassen, werden iteratoren früher zurückgegeben
begin
undend
ungültig.Wenn ein Element an der ersten Position des
deque
Elements eingefügt wird, werden alle Iteratoren, aber keine Verweise, die vorhandene Elemente kennzeichnen, ungültig.Wenn am Ende des
deque
Elements ein Element eingefügt wird,end
werden alle Iteratoren, aber keine Verweise, die vorhandene Elemente kennzeichnen, ungültig.Wenn ein Element am Anfang des
deque
Elements gelöscht wird, werden nur dieses Iterator und Verweise auf das gelöschte Element ungültig.Wenn das letzte Element vom Ende des
deque
Elements gelöscht wird, wird nur dieses Iterator auf das endgültige Element und Verweise auf das gelöschte Element ungültig.
Andernfalls werden alle Iteratoren und Verweise durch das Einfügen und Löschen eines Elements und ungültig.
Member
Konstruktoren
Name | Beschreibung |
---|---|
deque |
Erstellt ein Objekt vom Typ deque . Es werden mehrere Konstruktoren bereitgestellt, um den Inhalt des Neuen deque auf unterschiedliche Weise einzurichten: leer; geladen mit einer bestimmten Anzahl leerer Elemente; Inhalte, die aus einem anderen deque verschoben oder kopiert wurden; Inhalte, die mit einem Iterator kopiert oder verschoben wurden, und ein Element, das in die deque count Zeiten kopiert wurde. Einige der Konstruktoren ermöglichen die Verwendung eines benutzerdefinierten allocator zum Erstellen von Elementen. |
TypeDefs
Name | Beschreibung |
---|---|
allocator_type |
Ein Typ, der die allocator -Klassentyp für das deque -Objekt darstellt. |
const_iterator |
Ein Typ, der einen Iterator mit zufälligem Zugriff bereitstellt, mit dem auf Elemente in der deque als const zugegriffen, und mit dem diese Elemente gelesen werden können. |
const_pointer |
Ein Typ, der einen Zeiger auf ein Element in einem deque As const bereitstellt. |
const_reference |
Ein Typ, der einen Verweis auf ein Element in einer deque zum Lesen und anderen Vorgängen als const . |
const_reverse_iterator |
Ein Typ, der einen Iterator mit zufälligem Zugriff bereitstellt, mit dem auf Elemente in der deque als const zugegriffen, und mit dem diese Elemente gelesen werden können. Dies deque wird umgekehrt angezeigt. Weitere Informationen finden Sie unter reverse_iterator "Klasse" |
difference_type |
Ein Typ, der den Unterschied zwischen zwei Iteratoren mit zufälligem Zugriff, die auf Elemente in derselben deque verweisen, bereitstellt. |
iterator |
Ein Typ, der einen Iterator mit zufälligem Zugriff bereitstellt, mit dem jedes Element in einer deque gelesen oder geändert werden kann. |
pointer |
Ein Typ, der einen Zeiger auf ein Element in einer deque bereitstellt. |
reference |
Ein Typ, der einen Verweis auf ein in einer deque gespeichertes Element bereitstellt. |
reverse_iterator |
Ein Typ, der einen Iterator mit zufälligem Zugriff bereitstellt, mit dem ein Element in einer deque gelesen oder geändert werden kann. Die deque Wird in umgekehrter Reihenfolge angezeigt. |
size_type |
Ein Typ, der die Anzahl von Elementen in einer deque zählt. |
value_type |
Ein Typ, der den in einer deque gespeicherten Datentyp darstellt. |
Funktionen
Name | Beschreibung |
---|---|
assign |
Löscht Elemente aus einer deque und kopiert eine neue Sequenz von Elementen in die Ziel-deque . |
at |
Gibt einen Verweis auf das Element an einer angegebenen Position in der deque zurück. |
back |
Gibt einen Verweis auf das letzte Element der deque zurück. |
begin |
Gibt ein Iterator mit zufälligem Zugriff zurück, der das erste Element in der deque adressiert. |
cbegin |
Gibt einen const Iterator an das erste Element in der .deque |
cend |
Gibt einen const -Iterator mit zufälligem Zugriff zurück, der auf eine Position unmittelbar nach dem Ende der deque verweist. |
clear |
Löscht alle Elemente einer deque auf. |
crbegin |
Gibt einen Iterator für zufälligen Zugriff const auf das erste Element in umgekehrter deque Reihenfolge zurück. |
crend |
Gibt einen Iterator für zufälligen Zugriff const auf das erste Element in umgekehrter deque Reihenfolge zurück. |
emplace |
Fügt ein direkt konstruiertes Element an einer angegebenen Position in die deque ein. |
emplace_back |
Fügt ein direkt konstruiertes Element am Ende der deque ein. |
emplace_front |
Fügt ein direkt konstruiertes Element am Anfang der deque ein. |
empty |
Gibt true zurück, wenn deque keine Elemente enthält, und gibt false zurück, wenn mindestens ein Element enthält. |
end |
Gibt einen Iterator mit zufälligem Zugriff zurück, der auf eine Position unmittelbar nach dem Ende der deque verweist. |
erase |
Entfernt ein Element oder eine Reihe von Elementen in einer deque aus angegebenen Speicherorten. |
front |
Gibt einen Verweis auf das erste Element in einer deque zurück. |
get_allocator |
Gibt eine Kopie des zum Erstellen der allocator verwendeten deque -Objekts zurück. |
insert |
Fügt ein Element, mehrere Elemente oder einen Reihe von Elementen an einer angegebenen Position in die deque ein. |
max_size |
Gibt die mögliche Maximallänge der deque zurück. |
pop_back |
Löscht das Element am Ende der deque . |
pop_front |
Löscht das Element am Anfang der deque . |
push_back |
Fügt am Ende der deque ein Element hinzu. |
push_front |
Fügt am Anfang der deque ein Element hinzu. |
rbegin |
Gibt dem ersten Element einen Iterator mit zufälligem Zugriff in umgekehrter deque zurück. |
rend |
Gibt einen Iterator mit zufälligem Zugriff zurück, der grade über das letzte Element in einer umgekehrten deque zeigt. |
resize |
Gibt eine neue Größe für eine deque an. |
shrink_to_fit |
Verwirft Überkapazität. |
size |
Gibt die Anzahl von Elementen in der deque zurück. |
swap |
Tauscht die Elemente zweier deque n. |
Operatoren
Name | Beschreibung |
---|---|
operator[] |
Gibt einen Verweis auf das deque -Element an einer angegebenen Position zurück. |
operator= |
Ersetzt die Elemente der deque mit einer Kopie einer anderen deque . |
allocator_type
Ein Typ, der die Allocator-Klasse für das deque
Objekt darstellt.
typedef Allocator allocator_type;
Hinweise
allocator_type
ist ein Synonym für den Vorlagenparameter Allocator
.
Beispiel
Ein Beispiel hierfür finden Sie unter get_allocator
.
assign
Löscht Elemente aus einem deque
Element und kopiert eine neue Gruppe von Elementen in das Ziel deque
.
template <class InputIterator>
void assign(
InputIterator First,
InputIterator Last);
void assign(
size_type Count,
const Type& Val);
void assign(initializer_list<Type> IList);
Parameter
First
Position des ersten Elements im Bereich der Elemente, die aus dem Argument deque
kopiert werden sollen.
Last
Position des ersten Elements über den Bereich der Elemente hinaus, die aus dem Argument deque
kopiert werden sollen.
Count
Die Anzahl der Kopien eines Elements, das in das deque
Element eingefügt wird.
Val
Der Wert des Elements, das in den deque
eingefügt wird.
IList
Das initializer_list
in die deque
.
Hinweise
Nachdem vorhandene Elemente im Ziel deque
gelöscht wurden, assign
fügt entweder einen angegebenen Elementbereich aus dem Original deque
oder von einem anderen deque
in das Ziel deque
ein, oder fügt Kopien eines neuen Elements eines angegebenen Werts in das Ziel deque
ein.
Beispiel
// deque_assign.cpp
// compile with: /EHsc
#include <deque>
#include <iostream>
#include <initializer_list>
int main()
{
using namespace std;
deque <int> c1, c2;
deque <int>::const_iterator cIter;
c1.push_back(10);
c1.push_back(20);
c1.push_back(30);
c2.push_back(40);
c2.push_back(50);
c2.push_back(60);
deque<int> d1{ 1, 2, 3, 4 };
initializer_list<int> iList{ 5, 6, 7, 8 };
d1.assign(iList);
cout << "d1 = ";
for (int i : d1)
cout << i;
cout << endl;
cout << "c1 =";
for (int i : c1)
cout << i;
cout << endl;
c1.assign(++c2.begin(), c2.end());
cout << "c1 =";
for (int i : c1)
cout << i;
cout << endl;
c1.assign(7, 4);
cout << "c1 =";
for (int i : c1)
cout << i;
cout << endl;
}
d1 = 5678c1 =102030c1 =5060c1 =4444444
at
Gibt einen Verweis auf das Element an einer angegebenen Position in der deque
zurück.
reference at(size_type pos);
const_reference at(size_type pos) const;
Parameter
pos
Die tiefgestellte (oder Positionsnummer) des Elements, auf das deque
verwiesen werden soll.
Rückgabewert
Wenn pos
die Größe des deque
Werts größer ist, at
wird eine Ausnahme ausgelöst.
Hinweise
Wenn der Rückgabewert at
eines const_reference
Objekts zugewiesen ist, kann das deque
Objekt nicht geändert werden. Wenn der Rückgabewert at
eines reference
Objekts zugewiesen ist, kann das deque
Objekt geändert werden.
Beispiel
// deque_at.cpp
// compile with: /EHsc
#include <deque>
#include <iostream>
int main( )
{
using namespace std;
deque <int> c1;
c1.push_back( 10 );
c1.push_back( 20 );
const int& i = c1.at( 0 );
int& j = c1.at( 1 );
cout << "The first element is " << i << endl;
cout << "The second element is " << j << endl;
}
The first element is 10
The second element is 20
back
Gibt einen Verweis auf das letzte Element der deque
zurück.
reference back();
const_reference back() const;
Rückgabewert
Das letzte Element der deque
. Wenn dies deque
leer ist, ist der Rückgabewert nicht definiert.
Hinweise
Wenn der Rückgabewert back
eines const_reference
Objekts zugewiesen ist, kann das deque
Objekt nicht geändert werden. Wenn der Rückgabewert back
eines reference
Objekts zugewiesen ist, kann das deque
Objekt geändert werden.
Bei der Kompilierung mithilfe _ITERATOR_DEBUG_LEVEL
von 1 oder 2 tritt ein Laufzeitfehler auf, wenn Sie versuchen, auf ein Element in einem leeren deque
Element zuzugreifen. Weitere Informationen finden Sie unter Checked Iterators .
Beispiel
// deque_back.cpp
// compile with: /EHsc
#include <deque>
#include <iostream>
int main( )
{
using namespace std;
deque <int> c1;
c1.push_back( 10 );
c1.push_back( 11 );
int& i = c1.back( );
const int& ii = c1.front( );
cout << "The last integer of c1 is " << i << endl;
i--;
cout << "The next-to-last integer of c1 is " << ii << endl;
}
The last integer of c1 is 11
The next-to-last integer of c1 is 10
begin
Gibt ein Iterator zurück, der das erste Element im deque
-Element adressiert.
const_iterator begin() const;
iterator begin();
Rückgabewert
Ein Iterator mit direktem Zugriff, der das erste Element im deque
adressiert oder auf die Position zeigt, der auf einen leeren deque
folgt.
Hinweise
Wenn der Rückgabewert begin
eines const_iterator
Objekts zugewiesen ist, kann das deque
Objekt nicht geändert werden. Wenn der Rückgabewert begin
eines iterator
Objekts zugewiesen ist, kann das deque
Objekt geändert werden.
Beispiel
// deque_begin.cpp
// compile with: /EHsc
#include <deque>
#include <iostream>
int main( )
{
using namespace std;
deque <int> c1;
deque <int>::iterator c1_Iter;
deque <int>::const_iterator c1_cIter;
c1.push_back( 1 );
c1.push_back( 2 );
c1_Iter = c1.begin( );
cout << "The first element of c1 is " << *c1_Iter << endl;
*c1_Iter = 20;
c1_Iter = c1.begin( );
cout << "The first element of c1 is now " << *c1_Iter << endl;
// The following line would be an error because iterator is const
// *c1_cIter = 200;
}
The first element of c1 is 1
The first element of c1 is now 20
cbegin
Gibt einen const
-Iterator zurück, mit dem das erste Element im Bereich behandelt wird.
const_iterator cbegin() const;
Rückgabewert
Ein const
-Random-Access-Iterator, der auf das erste Element des Bereichs zeigt oder die Position direkt hinter dem Ende eines leeren Bereichs (für einen leeren Bereich gilt cbegin() == cend()
).
Hinweise
Mit dem Rückgabewert von cbegin
, die Elemente im Bereich können nicht geändert werden.
Sie können diese Memberfunktion anstelle der begin()
-Memberfunktion verwenden, um sicherzustellen, dass der Rückgabewert const_iterator
ist. In der Regel wird sie zusammen mit dem auto
Stichwort "Typabzug" verwendet, wie im folgenden Beispiel gezeigt. Im folgenden Beispiel ist Container
ein beliebiger änderbarer (Nicht-const
-)Container, der begin()
und cbegin()
unterstützt.
auto i1 = Container.begin();
// i1 is Container<T>::iterator
auto i2 = Container.cbegin();
// i2 is Container<T>::const_iterator
cend
Gibt einen const
-Iterator zurück, der den Speicherort adressiert, der dem letzten Element eines Bereichs unmittelbar nachfolgt.
const_iterator cend() const;
Rückgabewert
Ein Random-Access-Iterator, der auf eine Position unmittelbar nach dem Ende des Bereichs verweist.
Hinweise
cend
wird verwendet, um zu testen, ob ein Iterator das Ende seines Bereichs übergeben hat.
Sie können diese Memberfunktion anstelle der end()
-Memberfunktion verwenden, um sicherzustellen, dass der Rückgabewert const_iterator
ist. In der Regel wird sie zusammen mit dem auto
Stichwort "Typabzug" verwendet, wie im folgenden Beispiel gezeigt. Im folgenden Beispiel ist Container
ein beliebiger änderbarer (Nicht-const
-)Container, der end()
und cend()
unterstützt.
auto i1 = Container.end();
// i1 is Container<T>::iterator
auto i2 = Container.cend();
// i2 is Container<T>::const_iterator
Der zurückgegebene cend
Wert sollte nicht abgeleitet werden.
clear
Löscht alle Elemente einer deque
auf.
void clear();
Beispiel
// deque_clear.cpp
// compile with: /EHsc
#include <deque>
#include <iostream>
int main( )
{
using namespace std;
deque <int> c1;
c1.push_back( 10 );
c1.push_back( 20 );
c1.push_back( 30 );
cout << "The size of the deque is initially " << c1.size( ) << endl;
c1.clear( );
cout << "The size of the deque after clearing is " << c1.size( ) << endl;
}
The size of the deque is initially 3
The size of the deque after clearing is 0
const_iterator
Ein Typ, der einen Iterator mit wahlfreiem Zugriff bereitstellt, der auf ein const
Element in der Datei deque
zugreifen und diese lesen kann.
typedef implementation-defined const_iterator;
Hinweise
Ein Typ const_iterator
kann nicht verwendet werden, um den Wert eines Elements zu ändern.
Beispiel
Ein Beispiel hierfür finden Sie unter back
.
const_pointer
Stellt einen Zeiger auf ein const
Element in einem deque
.
typedef typename Allocator::const_pointer const_pointer;
Hinweise
Ein Typ const_pointer
kann nicht verwendet werden, um den Wert eines Elements zu ändern. Ein iterator
Element wird häufiger verwendet, um auf ein deque
Element zuzugreifen.
const_reference
Ein Typ, der einen Verweis auf ein const
-Element bereitstellt, das in einem deque
-Element zum Lesen und Ausführen von const
-Vorgängen gespeichert ist.
typedef typename Allocator::const_reference const_reference;
Hinweise
Ein Typ const_reference
kann nicht verwendet werden, um den Wert eines Elements zu ändern.
Beispiel
// deque_const_ref.cpp
// compile with: /EHsc
#include <deque>
#include <iostream>
int main( )
{
using namespace std;
deque <int> c1;
c1.push_back( 10 );
c1.push_back( 20 );
const deque <int> c2 = c1;
const int &i = c2.front( );
const int &j = c2.back( );
cout << "The first element is " << i << endl;
cout << "The second element is " << j << endl;
// The following line would cause an error as c2 is const
// c2.push_back( 30 );
}
The first element is 10
The second element is 20
const_reverse_iterator
Ein Typ, der einen Iterator mit wahlfreiem Zugriff bereitstellt, der alle const
Elemente in der deque
Datei lesen kann.
typedef std::reverse_iterator<const_iterator> const_reverse_iterator;
Hinweise
Ein Typ const_reverse_iterator
kann den Wert eines Elements nicht ändern und wird zum Durchlaufen des deque
umgekehrten Elements verwendet.
Beispiel
Ein Beispiel zum Deklarieren und Verwenden eines Iterators finden Sie im Beispiel rbegin
.
crbegin
Gibt einen const
Iterator an das erste Element in einem umgekehrten deque
Element zurück.
const_reverse_iterator crbegin() const;
Rückgabewert
Ein umgekehrter const
Iterator für den zufälligen Zugriff, der das erste Element in einem umgekehrten deque
Element adressiert oder angibt, was das letzte Element in der unreversierten deque
.
Hinweise
Mit dem Rückgabewert des crbegin
Objekts kann das deque
Objekt nicht geändert werden.
Beispiel
// deque_crbegin.cpp
// compile with: /EHsc
#include <deque>
#include <iostream>
int main( )
{
using namespace std;
deque <int> v1;
deque <int>::iterator v1_Iter;
deque <int>::const_reverse_iterator v1_rIter;
v1.push_back( 1 );
v1.push_back( 2 );
v1_Iter = v1.begin( );
cout << "The first element of deque is "
<< *v1_Iter << "." << endl;
v1_rIter = v1.crbegin( );
cout << "The first element of the reversed deque is "
<< *v1_rIter << "." << endl;
}
The first element of deque is 1.
The first element of the reversed deque is 2.
crend
Gibt einen const
Iterator zurück, der die Position adressiert, die das letzte Element in einem umgekehrten Element erfolgreich war deque
.
const_reverse_iterator crend() const;
Rückgabewert
Ein umgekehrter const
Iterator für den zufälligen Zugriff, der die Position adressiert, die das letzte Element in einem umgekehrten deque
Element erfolgreich war (die Position, die dem ersten Element in der nicht reversierten deque
Seite vorausging).
Hinweise
crend
wird mit einem umgekehrten deque
verwendet, genau wie array::cend
bei einem deque
.
Mit dem Rückgabewert ( crend
entsprechend dekrementiert) kann das deque
Objekt nicht geändert werden.
crend
kann verwendet werden, um zu testen, ob das Ende der deque
von einem umgekehrten Iterator erreicht wurde.
Der zurückgegebene crend
Wert sollte nicht abgeleitet werden.
Beispiel
// deque_crend.cpp
// compile with: /EHsc
#include <deque>
#include <iostream>
int main( )
{
using namespace std;
deque <int> v1;
deque <int>::const_reverse_iterator v1_rIter;
v1.push_back( 1 );
v1.push_back( 2 );
for ( v1_rIter = v1.rbegin( ) ; v1_rIter != v1.rend( ) ; v1_rIter++ )
cout << *v1_rIter << endl;
}
2
1
deque
Erstellt eine deque
bestimmte Größe oder mit Elementen eines bestimmten Werts oder mit einem bestimmten Zuweisungselement oder als Kopie aller oder eines Teils eines anderen deque
Werts.
deque();
explicit deque(const Allocator& Al);
explicit deque(size_type Count);
deque(size_type Count, const Type& Val);
deque(
size_type Count,
const Type& Val,
const Allocator& Al);
deque(const deque& Right);
template <class InputIterator>
deque(InputIterator First, InputIterator Last);
template <class InputIterator>
deque(
InputIterator First,
InputIterator Last,
const Allocator& Al);
deque(initializer_list<value_type> IList, const Allocator& Al);
Parameter
Al
Die mit diesem Objekt zu verwendende Zuweisungsklasse.
Count
Die Anzahl der Elemente im konstruierten deque
.
Val
Der Wert der Elemente im konstruierten deque
.
Right
Das deque
-Element, von dem das erstellte deque
-Element eine Kopie sein soll.
First
Die Position des ersten Elements in dem zu kopierenden Elementbereich.
Last
Die Position des ersten Elements nach dem zu kopierenden Elementbereich.
IList
Das zu kopierende initializer_list
.
Hinweise
Alle Konstruktoren speichern ein Allocator-Objekt (Al
) und initialisieren die deque
.
Die ersten beiden Konstruktoren geben eine leere Initiale deque
an; die zweite gibt auch den zu verwendenden Allocatortyp (_Al
) an.
Der dritte Konstruktor gibt eine Wiederholung einer angegebenen Anzahl (count
) von Elementen des Standardwerts für die Klasse Type
an.
Die vierten und fünften Konstruktoren geben eine Wiederholung von (Count
) Elementen des Werts val
an.
Der sechste Konstruktor gibt eine Kopie der deque
Right
.
Der siebte und achte Konstruktor kopieren den Bereich [First, Last)
eines deque
.
Der siebte Konstruktor verschiebt den deque
Right
.
Der achte Konstruktor kopiert den Inhalt eines initializer_list
.
Keine der Konstruktoren führen Zwischenneuzuordnungen aus.
Beispiel
/ compile with: /EHsc
#include <deque>
#include <iostream>
#include <forward_list>
int main()
{
using namespace std;
forward_list<int> f1{ 1, 2, 3, 4 };
f1.insert_after(f1.begin(), { 5, 6, 7, 8 });
deque <int>::iterator c1_Iter, c2_Iter, c3_Iter, c4_Iter, c5_Iter, c6_Iter;
// Create an empty deque c0
deque <int> c0;
// Create a deque c1 with 3 elements of default value 0
deque <int> c1(3);
// Create a deque c2 with 5 elements of value 2
deque <int> c2(5, 2);
// Create a deque c3 with 3 elements of value 1 and with the
// allocator of deque c2
deque <int> c3(3, 1, c2.get_allocator());
// Create a copy, deque c4, of deque c2
deque <int> c4(c2);
// Create a deque c5 by copying the range c4[ first, last)
c4_Iter = c4.begin();
c4_Iter++;
c4_Iter++;
deque <int> c5(c4.begin(), c4_Iter);
// Create a deque c6 by copying the range c4[ first, last) and
// c2 with the allocator of deque
c4_Iter = c4.begin();
c4_Iter++;
c4_Iter++;
c4_Iter++;
deque <int> c6(c4.begin(), c4_Iter, c2.get_allocator());
// Create a deque c8 by copying the contents of an initializer_list
// using brace initialization
deque<int> c8({ 1, 2, 3, 4 });
initializer_list<int> iList{ 5, 6, 7, 8 };
deque<int> c9( iList);
cout << "c1 = ";
for (int i : c1)
cout << i << " ";
cout << endl;
cout << "c2 = ";
for (int i : c2)
cout << i << " ";
cout << endl;
cout << "c3 = ";
for (int i : c3)
cout << i << " ";
cout << endl;
cout << "c4 = ";
for (int i : c4)
cout << i << " ";
cout << endl;
cout << "c5 = ";
for (int i : c5)
cout << i << " ";
cout << endl;
cout << "c6 = ";
for (int i : c6)
cout << i << " ";
cout << endl;
// Move deque c6 to deque c7
deque <int> c7(move(c6));
deque <int>::iterator c7_Iter;
cout << "c7 =";
for (int i : c7)
cout << i << " ";
cout << endl;
cout << "c8 = ";
for (int i : c8)
cout << i << " ";
cout << endl;
cout << "c9 = ";
for (int i : c9)
cout << i << " ";
cout << endl;
int x = 3;
}
// deque_deque.cpp
// compile with: /EHsc
#include <deque>
#include <iostream>
int main( )
{
using namespace std;
deque <int>::iterator c1_Iter, c2_Iter, c3_Iter, c4_Iter, c5_Iter, c6_Iter;
// Create an empty deque c0
deque <int> c0;
// Create a deque c1 with 3 elements of default value 0
deque <int> c1( 3 );
// Create a deque c2 with 5 elements of value 2
deque <int> c2( 5, 2 );
// Create a deque c3 with 3 elements of value 1 and with the
// allocator of deque c2
deque <int> c3( 3, 1, c2.get_allocator( ) );
// Create a copy, deque c4, of deque c2
deque <int> c4( c2 );
// Create a deque c5 by copying the range c4[ first, last)
c4_Iter = c4.begin( );
c4_Iter++;
c4_Iter++;
deque <int> c5( c4.begin( ), c4_Iter );
// Create a deque c6 by copying the range c4[ first, last) and
// c2 with the allocator of deque
c4_Iter = c4.begin( );
c4_Iter++;
c4_Iter++;
c4_Iter++;
deque <int> c6( c4.begin( ), c4_Iter, c2.get_allocator( ) );
// Create a deque c8 by copying the contents of an initializer_list
// using brace initialization
deque<int> c8({ 1, 2, 3, 4 });
initializer_list<int> iList{ 5, 6, 7, 8 };
deque<int> c9( iList);
cout << "c1 = ";
for ( c1_Iter = c1.begin( ); c1_Iter != c1.end( ); c1_Iter++ )
cout << *c1_Iter << " ";
cout << endl;
cout << "c2 = ";
for ( c2_Iter = c2.begin( ); c2_Iter != c2.end( ); c2_Iter++ )
cout << *c2_Iter << " ";
cout << endl;
cout << "c3 = ";
for ( c3_Iter = c3.begin( ); c3_Iter != c3.end( ); c3_Iter++ )
cout << *c3_Iter << " ";
cout << endl;
cout << "c4 = ";
for ( c4_Iter = c4.begin( ); c4_Iter != c4.end( ); c4_Iter++ )
cout << *c4_Iter << " ";
cout << endl;
cout << "c5 = ";
for ( c5_Iter = c5.begin( ); c5_Iter != c5.end( ); c5_Iter++ )
cout << *c5_Iter << " ";
cout << endl;
cout << "c6 = ";
for ( c6_Iter = c6.begin( ); c6_Iter != c6.end( ); c6_Iter++ )
cout << *c6_Iter << " ";
cout << endl;
// Move deque c6 to deque c7
deque <int> c7( move(c6) );
deque <int>::iterator c7_Iter;
cout << "c7 =" ;
for ( c7_Iter = c7.begin( ) ; c7_Iter != c7.end( ) ; c7_Iter++ )
cout << " " << *c7_Iter;
cout << endl;
cout << "c8 = ";
for (int i : c8)
cout << i << " ";
cout << endl;
cout << "c9 = ";
or (int i : c9)
cout << i << " ";
cout << endl;
}
difference_type
Ein Typ, der den Unterschied zwischen zwei Iteratoren, die auf Elemente innerhalb derselben deque
verweisen, bereitstellt.
typedef typename Allocator::difference_type difference_type;
Hinweise
Ein difference_type
kann auch als die Anzahl der Elemente zwischen zwei Zeigern beschrieben werden.
Beispiel
// deque_diff_type.cpp
// compile with: /EHsc
#include <iostream>
#include <deque>
#include <algorithm>
int main( )
{
using namespace std;
deque <int> c1;
deque <int>::iterator c1_Iter, c2_Iter;
c1.push_back( 30 );
c1.push_back( 20 );
c1.push_back( 30 );
c1.push_back( 10 );
c1.push_back( 30 );
c1.push_back( 20 );
c1_Iter = c1.begin( );
c2_Iter = c1.end( );
deque <int>::difference_type df_typ1, df_typ2, df_typ3;
df_typ1 = count( c1_Iter, c2_Iter, 10 );
df_typ2 = count( c1_Iter, c2_Iter, 20 );
df_typ3 = count( c1_Iter, c2_Iter, 30 );
cout << "The number '10' is in c1 collection " << df_typ1 << " times.\n";
cout << "The number '20' is in c1 collection " << df_typ2 << " times.\n";
cout << "The number '30' is in c1 collection " << df_typ3 << " times.\n";
}
The number '10' is in c1 collection 1 times.
The number '20' is in c1 collection 2 times.
The number '30' is in c1 collection 3 times.
emplace
Fügt ein direkt konstruiertes Element an einer angegebenen Position in die deque
ein.
iterator emplace(
const_iterator _Where,
Type&& val);
Parameter
_Where
Die Position, an der deque
das erste Element eingefügt wird.
val
Der Wert des Elements, das in den deque
eingefügt wird.
Rückgabewert
Die Funktion gibt einen Iterator zurück, der auf den Speicherort zeigt, an dem das neue Element in den deque
eingefügt wurde.
Hinweise
Einfügevorgänge können sehr speicherintensiv sein. Eine Abhandlung zur Leistung von deque
finden Sie unter deque
.
Beispiel
// deque_emplace.cpp
// compile with: /EHsc
#include <deque>
#include <iostream>
int main( )
{
using namespace std;
deque <int> v1;
deque <int>::iterator Iter;
v1.push_back( 10 );
v1.push_back( 20 );
v1.push_back( 30 );
cout << "v1 =" ;
for ( Iter = v1.begin( ) ; Iter != v1.end( ) ; Iter++ )
cout << " " << *Iter;
cout << endl;
// initialize a deque of deques by moving v1
deque < deque <int> > vv1;
vv1.emplace( vv1.begin(), move( v1 ) );
if ( vv1.size( ) != 0 && vv1[0].size( ) != 0 )
{
cout << "vv1[0] =";
for (Iter = vv1[0].begin( ); Iter != vv1[0].end( ); Iter++ )
cout << " " << *Iter;
cout << endl;
}
}
v1 = 10 20 30
vv1[0] = 10 20 30
emplace_back
Fügt ein direkt konstruiertes Element am Ende der deque
ein.
void emplace_back(Type&& val);
Parameter
val
Das Element, das am Ende der deque
hinzugefügt wird.
Beispiel
// deque_emplace_back.cpp
// compile with: /EHsc
#include <deque>
#include <iostream>
int main( )
{
using namespace std;
deque <int> v1;
v1.push_back( 1 );
if ( v1.size( ) != 0 )
cout << "Last element: " << v1.back( ) << endl;
v1.push_back( 2 );
if ( v1.size( ) != 0 )
cout << "New last element: " << v1.back( ) << endl;
// initialize a deque of deques by moving v1
deque < deque <int> > vv1;
vv1.emplace_back( move( v1 ) );
if ( vv1.size( ) != 0 && vv1[0].size( ) != 0 )
cout << "Moved last element: " << vv1[0].back( ) << endl;
}
Last element: 1
New last element: 2
Moved last element: 2
emplace_front
Fügt ein direkt konstruiertes Element am Ende der deque
ein.
void emplace_front(Type&& val);
Parameter
val
Das Element, das am Anfang der deque
.
Beispiel
// deque_emplace_front.cpp
// compile with: /EHsc
#include <deque>
#include <iostream>
int main( )
{
using namespace std;
deque <int> v1;
v1.push_back( 1 );
if ( v1.size( ) != 0 )
cout << "Last element: " << v1.back( ) << endl;
v1.push_back( 2 );
if ( v1.size( ) != 0 )
cout << "New last element: " << v1.back( ) << endl;
// initialize a deque of deques by moving v1
deque < deque <int> > vv1;
vv1.emplace_front( move( v1 ) );
if ( vv1.size( ) != 0 && vv1[0].size( ) != 0 )
cout << "Moved last element: " << vv1[0].back( ) << endl;
}
Last element: 1
New last element: 2
Moved last element: 2
empty
Testet, ob ein deque
-Element leer ist.
bool empty() const;
Rückgabewert
true
wenn die deque
leer ist; false
wenn dies deque
nicht leer ist.
Beispiel
// deque_empty.cpp
// compile with: /EHsc
#include <deque>
#include <iostream>
int main( )
{
using namespace std;
deque <int> c1;
c1.push_back( 10 );
if ( c1.empty( ) )
cout << "The deque is empty." << endl;
else
cout << "The deque is not empty." << endl;
}
The deque is not empty.
end
Gibt einen Iterator zurück, der den Speicherort adressiert, der dem letzten Element einem deque
-Element nachfolgt.
const_iterator end() const;
iterator end();
Rückgabewert
Ein Iterator mit wahlfreiem Zugriff, der den Speicherort adressiert, der das letzte Element in einem deque
. Wenn die deque
leer ist, gilt anschließend deque::end == deque::begin
.
Hinweise
end
wird verwendet, um zu testen, ob ein Iterator das Ende seines deque
erreicht hat.
Beispiel
// deque_end.cpp
// compile with: /EHsc
#include <deque>
#include <iostream>
int main( )
{
using namespace std;
deque <int> c1;
deque <int>::iterator c1_Iter;
c1.push_back( 10 );
c1.push_back( 20 );
c1.push_back( 30 );
c1_Iter = c1.end( );
c1_Iter--;
cout << "The last integer of c1 is " << *c1_Iter << endl;
c1_Iter--;
*c1_Iter = 400;
cout << "The new next-to-last integer of c1 is " << *c1_Iter << endl;
// If a const iterator had been declared instead with the line:
// deque <int>::const_iterator c1_Iter;
// an error would have resulted when inserting the 400
cout << "The deque is now:";
for ( c1_Iter = c1.begin( ); c1_Iter != c1.end( ); c1_Iter++ )
cout << " " << *c1_Iter;
}
The last integer of c1 is 30
The new next-to-last integer of c1 is 400
The deque is now: 10 400 30
erase
Entfernt ein Element oder eine Reihe von Elementen in einer deque
aus angegebenen Speicherorten.
iterator erase(iterator _Where);
iterator erase(iterator first, iterator last);
Parameter
_Where
Die Position des Elements, das aus dem deque
Element entfernt werden soll.
first
Position des ersten Elements, das aus dem deque
.
last
Position direkt über dem letzten Element entfernt aus dem deque
.
Rückgabewert
Ein Iterator mit zufälligem Zugriff, der das erste Element angibt, das über alle entfernten Elemente hinausgeht, oder ein Zeiger auf das Ende des deque
Elements, wenn kein solches Element vorhanden ist.
Hinweise
erase
löst nie eine Ausnahme aus.
Beispiel
// deque_erase.cpp
// compile with: /EHsc
#include <deque>
#include <iostream>
int main( )
{
using namespace std;
deque <int> c1;
deque <int>::iterator Iter;
c1.push_back( 10 );
c1.push_back( 20 );
c1.push_back( 30 );
c1.push_back( 40 );
c1.push_back( 50 );
cout << "The initial deque is: ";
for ( Iter = c1.begin( ); Iter != c1.end( ); Iter++ )
cout << *Iter << " ";
cout << endl;
c1.erase( c1.begin( ) );
cout << "After erasing the first element, the deque becomes: ";
for ( Iter = c1.begin( ); Iter != c1.end( ); Iter++ )
cout << *Iter << " ";
cout << endl;
Iter = c1.begin( );
Iter++;
c1.erase( Iter, c1.end( ) );
cout << "After erasing all elements but the first, deque becomes: ";
for ( Iter = c1.begin( ); Iter != c1.end( ); Iter++ )
cout << *Iter << " ";
cout << endl;
}
The initial deque is: 10 20 30 40 50
After erasing the first element, the deque becomes: 20 30 40 50
After erasing all elements but the first, deque becomes: 20
front
Gibt einen Verweis auf das erste Element in einer deque
zurück.
reference front();
const_reference front() const;
Rückgabewert
Wenn dies deque
leer ist, ist die Rückgabe nicht definiert.
Hinweise
Wenn der Rückgabewert front
eines const_reference
Objekts zugewiesen ist, kann das deque
Objekt nicht geändert werden. Wenn der Rückgabewert front
eines reference
Objekts zugewiesen ist, kann das deque
Objekt geändert werden.
Bei der Kompilierung mithilfe _ITERATOR_DEBUG_LEVEL
von 1 oder 2 tritt ein Laufzeitfehler auf, wenn Sie versuchen, auf ein Element in einem leeren deque
Element zuzugreifen. Weitere Informationen finden Sie unter Checked Iterators .
Beispiel
// deque_front.cpp
// compile with: /EHsc
#include <deque>
#include <iostream>
int main( )
{
using namespace std;
deque <int> c1;
c1.push_back( 10 );
c1.push_back( 11 );
int& i = c1.front( );
const int& ii = c1.front( );
cout << "The first integer of c1 is " << i << endl;
i++;
cout << "The second integer of c1 is " << ii << endl;
}
The first integer of c1 is 10
The second integer of c1 is 11
get_allocator
Gibt eine Kopie des allocator -Objekts zurück, das zum Erstellen des deque
Objekts verwendet wird.
Allocator get_allocator() const;
Rückgabewert
Der von der deque
Zuweisung verwendete Allokator .
Hinweise
Allocators für die deque
Klasse geben an, wie die Klasse Speicher verwaltet. Für die meisten Programmieranforderungen reichen die standardmäßigen allocator-Objekte mit Container-Klassen der C++-Standardbibliothek aus. Schreiben und Verwenden Ihrer eigener Zuweisungsklasse ist ein C++ -Thema für Fortgeschrittene.
Beispiel
// deque_get_allocator.cpp
// compile with: /EHsc
#include <deque>
#include <iostream>
int main( )
{
using namespace std;
// The following lines declare objects that use the default allocator.
deque <int> c1;
deque <int, allocator<int> > c2 = deque <int, allocator<int> >( allocator<int>( ) );
// c3 will use the same allocator class as c1
deque <int> c3( c1.get_allocator( ) );
deque <int>::allocator_type xlst = c1.get_allocator( );
// You can now call functions on the allocator class used by c1
}
insert
Fügt ein Element oder eine Reihe von Elementen oder einen Bereich von Elementen an der deque
angegebenen Position ein.
iterator insert(
const_iterator Where,
const Type& Val);
iterator insert(
const_iterator Where,
Type&& Val);
void insert(
iterator Where,
size_type Count,
const Type& Val);
template <class InputIterator>
void insert(
iterator Where,
InputIterator First,
InputIterator Last);
iterator insert(
iterator Where,initializer_list<Type>
IList);
Parameter
Where
Die Position im Ziel deque
, an der das erste Element eingefügt wird.
Val
Der Wert des Elements, das in den deque
eingefügt wird.
Count
Die Anzahl der Elemente, die in die deque
.
First
Die Position des ersten Elements im Bereich von Elementen im Argument deque
, das kopiert werden soll.
Last
Die Position des ersten Elements über den Bereich von Elementen im Argument deque
hinaus, das kopiert werden soll.
IList
Die initializer_list
einzufügenden Elemente.
Rückgabewert
Die ersten beiden Einfügefunktionen geben einen Iterator zurück, der auf die Position zeigt, an der das neue Element in die deque
Einfügemarke eingefügt wurde.
Hinweise
Jeder Einfügevorgang kann ressourcenintensiv sein.
iterator
Ein Typ, der einen Iterator mit zufälligem Zugriff bereitstellt, mit dem jedes Element in einer deque
gelesen oder geändert werden kann.
typedef implementation-defined iterator;
Hinweise
Ein Typ iterator
kann verwendet werden, um den Wert eines Elements zu ändern.
Beispiel
Ein Beispiel hierfür finden Sie unter begin
.
max_size
Gibt die Maximallänge der deque
zurück.
size_type max_size() const;
Rückgabewert
Die maximal mögliche Länge der deque
.
Beispiel
// deque_max_size.cpp
// compile with: /EHsc
#include <deque>
#include <iostream>
int main( )
{
using namespace std;
deque <int> c1;
deque <int>::size_type i;
i = c1.max_size( );
cout << "The maximum possible length of the deque is " << i << "." << endl;
}
operator[]
Gibt einen Verweis auf das deque
-Element an einer angegebenen Position zurück.
reference operator[](size_type pos);
const_reference operator[](size_type pos) const;
Parameter
pos
Die Position des deque
elements, auf das verwiesen werden soll.
Rückgabewert
Ein Verweis auf das Element, dessen Position im Argument angegeben wird. Wenn die angegebene Position größer als die Größe des deque
Bereichs ist, ist das Ergebnis nicht definiert.
Hinweise
Wenn der Rückgabewert operator[]
eines const_reference
Objekts zugewiesen ist, kann das deque
Objekt nicht geändert werden. Wenn der Rückgabewert operator[]
eines reference
Objekts zugewiesen ist, kann das deque
Objekt geändert werden.
Bei der Kompilierung mithilfe von _ITERATOR_DEBUG_LEVEL
1 oder 2 tritt ein Laufzeitfehler auf, wenn Sie versuchen, auf ein Element außerhalb der Grenzen der .deque
Weitere Informationen finden Sie unter Checked Iterators .
Beispiel
// deque_op_ref.cpp
// compile with: /EHsc
#include <deque>
#include <iostream>
int main( )
{
using namespace std;
deque <int> c1;
c1.push_back( 10 );
c1.push_back( 20 );
cout << "The first integer of c1 is " << c1[0] << endl;
int& i = c1[1];
cout << "The second integer of c1 is " << i << endl;
}
The first integer of c1 is 10
The second integer of c1 is 20
operator=
Ersetzt die Elemente dieser deque
Elemente mithilfe der Elemente aus einem anderen deque
.
deque& operator=(const deque& right);
deque& operator=(deque&& right);
Parameter
right
Dies deque
stellt den neuen Inhalt bereit.
Hinweise
Die erste Außerkraftsetzung kopiert Elemente in right
diese deque
aus , der Quelle der Zuordnung. Die zweite Außerkraftsetzung verschiebt Elemente von deque
diesem Element.right
Elemente, die in diesem deque
Element enthalten sind, bevor der Operator ausgeführt wird, werden entfernt.
Beispiel
// deque_operator_as.cpp
// compile with: /EHsc
#include <deque>
#include <iostream>
using namespace std;
typedef deque<int> MyDeque;
template<typename MyDeque> struct S;
template<typename MyDeque> struct S<MyDeque&> {
static void show( MyDeque& d ) {
MyDeque::const_iterator iter;
for (iter = d.cbegin(); iter != d.cend(); iter++)
cout << *iter << " ";
cout << endl;
}
};
template<typename MyDeque> struct S<MyDeque&&> {
static void show( MyDeque&& d ) {
MyDeque::const_iterator iter;
for (iter = d.cbegin(); iter != d.cend(); iter++)
cout << *iter << " ";
cout << " via unnamed rvalue reference " << endl;
}
};
int main( )
{
MyDeque d1, d2;
d1.push_back(10);
d1.push_back(20);
d1.push_back(30);
d1.push_back(40);
d1.push_back(50);
cout << "d1 = " ;
S<MyDeque&>::show( d1 );
d2 = d1;
cout << "d2 = ";
S<MyDeque&>::show( d2 );
cout << " ";
S<MyDeque&&>::show ( move< MyDeque& > (d1) );
}
pointer
Stellt einen Zeiger auf ein Element in einem deque
.
typedef typename Allocator::pointer pointer;
Hinweise
Ein Typ pointer
kann verwendet werden, um den Wert eines Elements zu ändern. Ein iterator
Element wird häufiger verwendet, um auf ein deque
Element zuzugreifen.
pop_back
Löscht das Element am Ende der .deque
void pop_back();
Hinweise
Das letzte Element darf nicht leer sein. pop_back
löst nie eine Ausnahme aus.
Beispiel
// deque_pop_back.cpp
// compile with: /EHsc
#include <deque>
#include <iostream>
int main( )
{
using namespace std;
deque <int> c1;
c1.push_back( 1 );
c1.push_back( 2 );
cout << "The first element is: " << c1.front( ) << endl;
cout << "The last element is: " << c1.back( ) << endl;
c1.pop_back( );
cout << "After deleting the element at the end of the deque, the "
"last element is: " << c1.back( ) << endl;
}
The first element is: 1
The last element is: 2
After deleting the element at the end of the deque, the last element is: 1
pop_front
Löscht das Element am Anfang der deque
.
void pop_front();
Hinweise
Das erste Element darf nicht leer sein. pop_front
löst nie eine Ausnahme aus.
Beispiel
// deque_pop_front.cpp
// compile with: /EHsc
#include <deque>
#include <iostream>
int main( )
{
using namespace std;
deque <int> c1;
c1.push_back( 1 );
c1.push_back( 2 );
cout << "The first element is: " << c1.front( ) << endl;
cout << "The second element is: " << c1.back( ) << endl;
c1.pop_front( );
cout << "After deleting the element at the beginning of the "
"deque, the first element is: " << c1.front( ) << endl;
}
The first element is: 1
The second element is: 2
After deleting the element at the beginning of the `deque`, the first element is: 2
push_back
Fügt am Ende der deque
ein Element hinzu.
void push_back(const Type& val);
void push_back(Type&& val);
Parameter
val
Das Element, das am Ende der deque
hinzugefügt wird.
Hinweise
Wenn eine Ausnahme ausgelöst wird, bleibt die deque
unverändert, und die Ausnahme wird erneut ausgelöst.
push_front
Fügt am Anfang des deque
Elements ein Element hinzu.
void push_front(const Type& val);
void push_front(Type&& val);
Parameter
val
Das Element, das am Anfang der deque
.
Hinweise
Wenn eine Ausnahme ausgelöst wird, bleibt die deque
unverändert, und die Ausnahme wird erneut ausgelöst.
Beispiel
// deque_push_front.cpp
// compile with: /EHsc
#include <deque>
#include <iostream>
#include <string>
int main( )
{
using namespace std;
deque <int> c1;
c1.push_front( 1 );
if ( c1.size( ) != 0 )
cout << "First element: " << c1.front( ) << endl;
c1.push_front( 2 );
if ( c1.size( ) != 0 )
cout << "New first element: " << c1.front( ) << endl;
// move initialize a deque of strings
deque <string> c2;
string str("a");
c2.push_front( move( str ) );
cout << "Moved first element: " << c2.front( ) << endl;
}
First element: 1
New first element: 2
Moved first element: a
rbegin
Gibt einen Iterator an das erste Element in einer umgekehrten deque
Zurück.
const_reverse_iterator rbegin() const;
reverse_iterator rbegin();
Rückgabewert
Ein umgekehrter Iterator für den zufälligen Zugriff, der das erste Element in einem umgekehrten deque
Element adressiert oder angibt, was das letzte Element in der unreversierten deque
.
Hinweise
rbegin
wird mit einem umgekehrten deque
verwendet, genau wie begin
bei einem deque
.
Wenn der Rückgabewert rbegin
eines const_reverse_iterator
Objekts zugewiesen ist, kann das deque
Objekt nicht geändert werden. Wenn der Rückgabewert rbegin
eines reverse_iterator
Objekts zugewiesen ist, kann das deque
Objekt geändert werden.
Mit rbegin
kann ein deque
rückwärts durchlaufen werden.
Beispiel
// deque_rbegin.cpp
// compile with: /EHsc
#include <deque>
#include <iostream>
int main( )
{
using namespace std;
deque <int> c1;
deque <int>::iterator c1_Iter;
deque <int>::reverse_iterator c1_rIter;
// If the following line had replaced the line above, an error
// would have resulted in the line modifying an element
// (commented below) because the iterator would have been const
// deque <int>::const_reverse_iterator c1_rIter;
c1.push_back( 10 );
c1.push_back( 20 );
c1.push_back( 30 );
c1_rIter = c1.rbegin( );
cout << "Last element in the deque is " << *c1_rIter << "." << endl;
cout << "The deque contains the elements: ";
for ( c1_Iter = c1.begin( ); c1_Iter != c1.end( ); c1_Iter++ )
cout << *c1_Iter << " ";
cout << "in that order.";
cout << endl;
// rbegin can be used to iterate through a deque in reverse order
cout << "The reversed deque is: ";
for ( c1_rIter = c1.rbegin( ); c1_rIter != c1.rend( ); c1_rIter++ )
cout << *c1_rIter << " ";
cout << endl;
c1_rIter = c1.rbegin( );
*c1_rIter = 40; // This would have caused an error if a
// const_reverse iterator had been declared as
// noted above
cout << "Last element in deque is now " << *c1_rIter << "." << endl;
}
Last element in the deque is 30.
The deque contains the elements: 10 20 30 in that order.
The reversed deque is: 30 20 10
Last element in deque is now 40.
reference
Ein Typ, der einen Verweis auf ein in einer deque
gespeichertes Element bereitstellt.
typedef typename Allocator::reference reference;
Beispiel
// deque_reference.cpp
// compile with: /EHsc
#include <deque>
#include <iostream>
int main( )
{
using namespace std;
deque <int> c1;
c1.push_back( 10 );
c1.push_back( 20 );
const int &i = c1.front( );
int &j = c1.back( );
cout << "The first element is " << i << endl;
cout << "The second element is " << j << endl;
}
The first element is 10
The second element is 20
rend
Gibt einen Iterator zurück, der den Speicherort adressiert, der dem letzten Element eines umgekehrten deque
-Elements nachfolgt.
const_reverse_iterator rend() const;
reverse_iterator rend();
Rückgabewert
Ein umgekehrter Iterator für den zufälligen Zugriff, der die Position adressiert, die das letzte Element in einem umgekehrten deque
Element erfolgreich war (die Position, die dem ersten Element in der nicht reversierten deque
Seite vorausging).
Hinweise
rend
wird mit einem umgekehrten deque
verwendet, genau wie end
bei einem deque
.
Wenn der Rückgabewert rend
eines const_reverse_iterator
Objekts zugewiesen ist, kann das deque
Objekt nicht geändert werden. Wenn der Rückgabewert rend
eines reverse_iterator
Objekts zugewiesen ist, kann das deque
Objekt geändert werden.
rend
kann verwendet werden, um zu testen, ob ein Umgekehrter Iterator das Ende des Iterators deque
erreicht hat.
Der zurückgegebene rend
Wert sollte nicht abgeleitet werden.
Beispiel
// deque_rend.cpp
// compile with: /EHsc
#include <deque>
#include <iostream>
int main( )
{
using namespace std;
deque <int> c1;
deque <int>::iterator c1_Iter;
deque <int>::reverse_iterator c1_rIter;
// If the following line had replaced the line above, an error
// would have resulted in the line modifying an element
// (commented below) because the iterator would have been const
// deque <int>::const_reverse_iterator c1_rIter;
c1.push_back( 10 );
c1.push_back( 20 );
c1.push_back( 30 );
c1_rIter = c1.rend( );
c1_rIter --; // Decrementing a reverse iterator moves it forward
// in the deque (to point to the first element here)
cout << "The first element in the deque is: " << *c1_rIter << endl;
cout << "The deque is: ";
for ( c1_Iter = c1.begin( ); c1_Iter != c1.end( ); c1_Iter++ )
cout << *c1_Iter << " ";
cout << endl;
// rend can be used to test if an iteration is through all of
// the elements of a reversed deque
cout << "The reversed deque is: ";
for ( c1_rIter = c1.rbegin( ); c1_rIter != c1.rend( ); c1_rIter++ )
cout << *c1_rIter << " ";
cout << endl;
c1_rIter = c1.rend( );
c1_rIter--; // Decrementing the reverse iterator moves it backward
// in the reversed deque (to the last element here)
*c1_rIter = 40; // This modification of the last element would
// have caused an error if a const_reverse
// iterator had been declared (as noted above)
cout << "The modified reversed deque is: ";
for ( c1_rIter = c1.rbegin( ); c1_rIter != c1.rend( ); c1_rIter++ )
cout << *c1_rIter << " ";
cout << endl;
}
The first element in the deque is: 10
The deque is: 10 20 30
The reversed deque is: 30 20 10
The modified reversed deque is: 30 20 40
resize
Gibt eine neue Größe für eine deque
an.
void resize(size_type _Newsize);
void resize(size_type _Newsize, Type val);
Parameter
_Newsize
Die neue Größe der deque
.
val
Der Wert der neuen Elemente, die deque
hinzugefügt werden sollen, wenn die neue Größe größer ist, wenn die ursprüngliche Größe größer ist. Wenn der Wert ausgelassen wird, werden dem Standardwert die neuen Elemente für die Klasse zugewiesen.
Hinweise
Wenn die deque
Elemente kleiner als _Newsize
sind, werden Elemente der deque
Größe hinzugefügt, bis sie die Größe _Newsize
erreicht.size
Wenn die deque
Elemente size
größer als _Newsize
sind, werden die Elemente, die am nächsten am Ende der deque
Löschung liegen, gelöscht, bis die deque
Größe _Newsize
erreicht ist.
Wenn die aktuelle Größe der deque
Datei mit dem identisch _Newsize
ist, wird keine Aktion ausgeführt.
size
entspricht der aktuellen Größe der deque
.
Beispiel
// deque_resize.cpp
// compile with: /EHsc
#include <deque>
#include <iostream>
int main( )
{
using namespace std;
deque <int> c1;
c1.push_back( 10 );
c1.push_back( 20 );
c1.push_back( 30 );
c1.resize( 4,40 );
cout << "The size of c1 is: " << c1.size( ) << endl;
cout << "The value of the last element is " << c1.back( ) << endl;
c1.resize( 5 );
cout << "The size of c1 is now: " << c1.size( ) << endl;
cout << "The value of the last element is now " << c1.back( ) << endl;
c1.resize( 2 );
cout << "The reduced size of c1 is: " << c1.size( ) << endl;
cout << "The value of the last element is now " << c1.back( ) << endl;
}
The size of c1 is: 4
The value of the last element is 40
The size of c1 is now: 5
The value of the last element is now 0
The reduced size of c1 is: 2
The value of the last element is now 20
reverse_iterator
Ein Typ, der einen Iterator mit wahlfreiem Zugriff bereitstellt, der ein Element in einem umgekehrten deque
Element lesen oder ändern kann.
typedef std::reverse_iterator<iterator> reverse_iterator;
Hinweise
Ein Typ reverse_iterator
wird verwendet, um die deque
.
Beispiel
Ein Beispiel hierfür finden Sie unter rbegin.
shrink_to_fit
Verwirft Überkapazität.
void shrink_to_fit();
Hinweise
Es gibt keine tragbare Möglichkeit, festzustellen, ob shrink_to_fit
der von einem deque
.
Beispiel
// deque_shrink_to_fit.cpp
// compile with: /EHsc
#include <deque>
#include <iostream>
int main( )
{
using namespace std;
deque <int> v1;
//deque <int>::iterator Iter;
v1.push_back( 1 );
v1.push_back( 2 );
cout << "Current size of v1 = "
<< v1.size( ) << endl;
v1.shrink_to_fit();
cout << "Current size of v1 = "
<< v1.size( ) << endl;
}
Current size of v1 = 1
Current size of v1 = 1
size
Gibt die Anzahl von Elementen in der deque
zurück.
size_type size() const;
Rückgabewert
Die aktuelle Länge des deque
.
Beispiel
// deque_size.cpp
// compile with: /EHsc
#include <deque>
#include <iostream>
int main( )
{
using namespace std;
deque <int> c1;
deque <int>::size_type i;
c1.push_back( 1 );
i = c1.size( );
cout << "The deque length is " << i << "." << endl;
c1.push_back( 2 );
i = c1.size( );
cout << "The deque length is now " << i << "." << endl;
}
The deque length is 1.
The deque length is now 2.
size_type
Ein Typ, der die Anzahl von Elementen in einer deque
zählt.
typedef typename Allocator::size_type size_type;
Beispiel
Ein Beispiel hierfür finden Sie unter size
.
swap
Tauscht die Elemente von zwei deque-Objekten aus.
void swap(deque<Type, Allocator>& right);
friend void swap(deque<Type, Allocator>& left, deque<Type, Allocator>& right) template <class Type, class Allocator>
void swap(deque<Type, Allocator>& left, deque<Type, Allocator>& right);
Parameter
right
Die deque
Bereitstellung der zu tauschenden Elemente oder deren deque
Elemente sollen mit denen des deque
left
Tauschs ausgetauscht werden.
left
A deque
, dessen Elemente mit denen der deque
right
ausgetauscht werden sollen.
Beispiel
// deque_swap.cpp
// compile with: /EHsc
#include <deque>
#include <iostream>
int main( )
{
using namespace std;
deque <int> c1, c2, c3;
deque <int>::iterator c1_Iter;
c1.push_back( 1 );
c1.push_back( 2 );
c1.push_back( 3 );
c2.push_back( 10 );
c2.push_back( 20 );
c3.push_back( 100 );
cout << "The original deque c1 is:";
for ( c1_Iter = c1.begin( ); c1_Iter != c1.end( ); c1_Iter++ )
cout << " " << *c1_Iter;
cout << endl;
c1.swap( c2 );
cout << "After swapping with c2, deque c1 is:";
for ( c1_Iter = c1.begin( ); c1_Iter != c1.end( ); c1_Iter++ )
cout << " " << *c1_Iter;
cout << endl;
swap( c1,c3 );
cout << "After swapping with c3, deque c1 is:";
for ( c1_Iter = c1.begin( ); c1_Iter != c1.end( ); c1_Iter++ )
cout << " " << *c1_Iter;
cout << endl;
swap<>(c1, c2);
cout << "After swapping with c2, deque c1 is:";
for ( c1_Iter = c1.begin( ); c1_Iter != c1.end( ); c1_Iter++ )
cout << " " << *c1_Iter;
cout << endl;
}
The original deque c1 is: 1 2 3
After swapping with c2, deque c1 is: 10 20
After swapping with c3, deque c1 is: 100
After swapping with c2, deque c1 is: 1 2 3
value_type
Ein Typ, der den in einer deque
gespeicherten Datentyp darstellt.
typedef typename Allocator::value_type value_type;
Hinweise
value_type
ist ein Synonym für den Vorlagenparameter Type
.
Beispiel
// deque_value_type.cpp
// compile with: /EHsc
#include <deque>
#include <iostream>
int main( )
{
using namespace std;
deque<int>::value_type AnInt;
AnInt = 44;
cout << AnInt << endl;
}
44
Siehe auch
Threadsicherheit in der C++-Standardbibliothek
C++-Standardbibliotheksreferenz