deque
Klasa
Rozmieszcza elementy danego typu w układzie liniowym i, podobnie jak wektor, umożliwia szybki losowy dostęp do dowolnego elementu oraz wydajne wstawianie i usuwanie z tyłu kontenera. Jednak w przeciwieństwie do wektora deque
klasa obsługuje również wydajne wstawianie i usuwanie z przodu kontenera.
Składnia
template <class Type, class Allocator = allocator<Type>>
class deque;
Parametry
Type
Typ danych elementu, który ma być przechowywany w obiekcie deque
.
Allocator
Typ reprezentujący przechowywany obiekt alokatora, który hermetyzuje szczegóły dotyczące deque
alokacji i cofania przydziału pamięci. Ten argument jest opcjonalny, a wartość domyślna to allocator<Type>
.
Uwagi
Wybór typu kontenera powinien ogólnie być oparty o typ wyszukiwania i wstawiania wymagany przez aplikację.
Vectors
powinien być preferowanym kontenerem do zarządzania sekwencją, gdy losowy dostęp do dowolnego elementu znajduje się w warstwie Premium, a operacje wstawiania lub usuwania elementów są wymagane tylko na końcu sekwencji. Wydajność kontenera listy jest lepsza, gdy wydajne wstawiania i usuwania (w stałym czasie) w dowolnej lokalizacji w sekwencji są w warstwie Premium. Takie operacje w środku sekwencji wymagają kopiowania elementów i przypisań proporcjonalnych do liczby elementów w sekwencji (czas liniowy).
Deque
reallocation występuje, gdy funkcja składowa musi wstawić lub wymazać elementy sekwencji:
Jeśli element zostanie wstawiony do pustej sekwencji lub jeśli element zostanie wymazany, aby pozostawić pustą sekwencję, iteratory wcześniej zwrócone przez
begin
iend
staną się nieprawidłowe.Jeśli element zostanie wstawiony na pierwszym miejscu
deque
elementu , wszystkie iteratory, ale nie odwołania, które wyznaczają istniejące elementy, stają się nieprawidłowe.Jeśli element zostanie wstawiony na końcu
deque
elementu , iend
wszystkie iteratory, ale bez odwołań, oznacza to, że istniejące elementy staną się nieprawidłowe.Jeśli element jest wymazany z przodu
deque
elementu , tylko iterator i odwołania do wymazanego elementu stają się nieprawidłowe.Jeśli ostatni element zostanie wymazany z końca
deque
elementu , tylko iterator do ostatniego elementu i odwołania do wymazanego elementu staną się nieprawidłowe.
W przeciwnym razie wstawianie lub wymazywanie elementu powoduje unieważnienie wszystkich iteratorów i odwołań.
Elementy członkowskie
Konstruktory
Nazwa/nazwisko | opis |
---|---|
deque |
Tworzy element deque . Kilka konstruktorów jest dostępnych do skonfigurowania zawartości nowego deque na różne sposoby: puste; załadowane z określoną liczbą pustych elementów; zawartość przeniesiona lub skopiowana z innego deque ; zawartość skopiowana lub przeniesiona przy użyciu iteratora; i jeden element skopiowany do deque count czasów. Niektóre konstruktory umożliwiają tworzenie elementów przy użyciu niestandardowego allocator elementu. |
Typedefs
Nazwa/nazwisko | opis |
---|---|
allocator_type |
Typ reprezentujący klasę allocator deque dla obiektu. |
const_iterator |
Typ, który udostępnia iterator dostępu losowego, który może uzyskiwać dostęp do elementów i odczytywać je jako deque const |
const_pointer |
Typ, który dostarcza wskaźnik do elementu w deque obiekcie jako const . |
const_reference |
Typ, który zawiera odwołanie do elementu w deque elemencie do odczytu i innych operacji jako const . |
const_reverse_iterator |
Typ, który udostępnia iterator dostępu losowego, który może uzyskiwać dostęp do elementów i odczytywać je w deque formacie const . Element deque jest wyświetlany odwrotnie. Aby uzyskać więcej informacji, zobacz reverse_iterator Klasa |
difference_type |
Typ, który zapewnia różnicę między dwoma iteratorami dostępu losowego, które odwołują się do elementów w tym samym obiekcie deque . |
iterator |
Typ, który udostępnia iterator dostępu losowego, który może odczytywać lub modyfikować dowolny element w obiekcie deque . |
pointer |
Typ, który dostarcza wskaźnik do elementu w elemecie deque . |
reference |
Typ, który zawiera odwołanie do elementu przechowywanego w obiekcie deque . |
reverse_iterator |
Typ, który udostępnia iterator dostępu losowego, który może odczytywać lub modyfikować element w obiekcie deque . Element deque jest wyświetlany w odwrotnej kolejności. |
size_type |
Typ, który zlicza liczbę elementów w obiekcie deque . |
value_type |
Typ reprezentujący typ danych przechowywany w obiekcie deque . |
Funkcje
Nazwa/nazwisko | opis |
---|---|
assign |
Usuwa elementy z elementu deque i kopiuje nową sekwencję elementów do elementu docelowego deque . |
at |
Zwraca odwołanie do elementu w określonej lokalizacji w elemencie deque . |
back |
Zwraca odwołanie do ostatniego elementu elementu .deque |
begin |
Zwraca iterator dostępu losowego odnoszący się do pierwszego elementu w elemecie deque . |
cbegin |
const Zwraca iterator do pierwszego elementu w obiekcie deque . |
cend |
Zwraca iterator dostępu losowego const , który wskazuje tuż poza końcem obiektu deque . |
clear |
Usuwa wszystkie elementy elementu deque . |
crbegin |
Zwraca iterator dostępu losowego const do pierwszego elementu w widoku w odwrotnej deque kolejności. |
crend |
Zwraca iterator dostępu losowego const do pierwszego elementu w widoku w odwrotnej deque kolejności. |
emplace |
Wstawia element skonstruowany w miejscu do deque obiektu w określonej pozycji. |
emplace_back |
Dodaje element skonstruowany na końcu elementu deque . |
emplace_front |
Dodaje element skonstruowany na początku elementu deque . |
empty |
Zwraca wartość true , jeśli deque element zawiera zero elementów, a false jeśli zawiera co najmniej jeden element. |
end |
Zwraca iterator dostępu losowego, który wskazuje tuż poza końcem obiektu deque . |
erase |
Usuwa element lub zakres elementów z deque określonych pozycji. |
front |
Zwraca odwołanie do pierwszego elementu w elemencie deque . |
get_allocator |
Zwraca kopię allocator obiektu, który jest używany do konstruowania obiektu deque . |
insert |
Wstawia element, kilka elementów lub zakres elementów do deque elementu w określonej pozycji. |
max_size |
Zwraca maksymalną możliwą długość obiektu deque . |
pop_back |
Usuwa element na końcu elementu deque . |
pop_front |
Usuwa element na początku elementu deque . |
push_back |
Dodaje element na końcu elementu deque . |
push_front |
Dodaje element na początku elementu deque . |
rbegin |
Zwraca iterator dostępu losowego do pierwszego elementu w odwróconym deque obiekcie . |
rend |
Zwraca iterator dostępu losowego, który wskazuje tuż poza ostatnim elementem odwróconego deque elementu . |
resize |
Określa nowy rozmiar elementu deque . |
shrink_to_fit |
Odrzuca nadmiarową pojemność. |
size |
Zwraca liczbę elementów w elem.deque |
swap |
Wymienia elementy dwóch deque s. |
Operatory
Nazwa/nazwisko | opis |
---|---|
operator[] |
Zwraca odwołanie do deque elementu w określonej pozycji. |
operator= |
Zastępuje elementy elementu deque kopią innego deque elementu . |
allocator_type
Typ reprezentujący klasę alokatora deque
dla obiektu.
typedef Allocator allocator_type;
Uwagi
allocator_type
jest synonimem parametru Allocator
szablonu .
Przykład
Zobacz przykład dla elementu get_allocator
.
assign
Usuwa elementy z elementu deque
i kopiuje nowy zestaw elementów do elementu docelowego deque
.
template <class InputIterator>
void assign(
InputIterator First,
InputIterator Last);
void assign(
size_type Count,
const Type& Val);
void assign(initializer_list<Type> IList);
Parametry
First
Pozycja pierwszego elementu w zakresie elementów do skopiowania z argumentu deque
.
Last
Pozycja pierwszego elementu poza zakresem elementów do skopiowania z argumentu deque
.
Count
Liczba kopii elementu wstawionego do elementu deque
.
Val
Wartość elementu wstawionego do elementu deque
.
IList
Wstawiany initializer_list
element do pliku deque
.
Uwagi
Po wymazaniu wszystkich istniejących elementów w obiekcie docelowym deque
wstawia określony zakres elementów z oryginalnego assign
lub z innego deque
elementu do elementu docelowego lub wstawia kopie nowego elementu określonej wartości do elementu docelowego deque
deque
. deque
Przykład
// 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
Zwraca odwołanie do elementu w określonej lokalizacji w elemencie deque
.
reference at(size_type pos);
const_reference at(size_type pos) const;
Parametry
pos
Indeks dolny (lub numer położenia) elementu do odwołania w elemencie deque
.
Wartość zwracana
Jeśli pos
wartość jest większa niż rozmiar obiektu deque
, at
zgłasza wyjątek.
Uwagi
Jeśli zwracana wartość at
elementu jest przypisana do const_reference
obiektu , deque
nie można zmodyfikować obiektu. Jeśli wartość zwracana at
obiektu jest przypisana do reference
obiektu , deque
można go zmodyfikować.
Przykład
// 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
Zwraca odwołanie do ostatniego elementu elementu .deque
reference back();
const_reference back() const;
Wartość zwracana
Ostatni element elementu .deque
deque
Jeśli wartość jest pusta, wartość zwracana jest niezdefiniowana.
Uwagi
Jeśli zwracana wartość back
elementu jest przypisana do const_reference
obiektu , deque
nie można zmodyfikować obiektu. Jeśli wartość zwracana back
obiektu jest przypisana do reference
obiektu , deque
można go zmodyfikować.
Podczas kompilowania przy użyciu _ITERATOR_DEBUG_LEVEL
wartości zdefiniowanej jako 1 lub 2 wystąpi błąd środowiska uruchomieniowego, jeśli spróbujesz uzyskać dostęp do elementu w pustym deque
elemecie . Aby uzyskać więcej informacji, zobacz Sprawdzone iteratory .
Przykład
// 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
Zwraca iterator odnoszący się do pierwszego elementu w elemecie deque
.
const_iterator begin() const;
iterator begin();
Wartość zwracana
Iterator dostępu losowego odnoszący się do pierwszego elementu w deque
lokalizacji lub kończy się powodzeniem pustego deque
elementu .
Uwagi
Jeśli zwracana wartość begin
elementu jest przypisana do const_iterator
obiektu , deque
nie można zmodyfikować obiektu. Jeśli wartość zwracana begin
elementu jest przypisana do iterator
obiektu , deque
można go zmodyfikować.
Przykład
// 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
const
Zwraca iterator, który adresuje pierwszy element w zakresie.
const_iterator cbegin() const;
Wartość zwracana
const
Iterator dostępu losowego, który wskazuje pierwszy element zakresu lub lokalizację tuż poza końcem pustego zakresu (dla pustego zakresu, cbegin() == cend()
).
Uwagi
Przy zwracanej wartości cbegin
elementu nie można modyfikować elementów w zakresie.
Możesz użyć tej funkcji składowej zamiast funkcji składowej begin()
, aby zagwarantować, że zwracana wartość to const_iterator
. Zazwyczaj jest używany w połączeniu ze auto
słowem kluczowym potrącenia typu, jak pokazano w poniższym przykładzie. W tym przykładzie rozważmy Container
, aby być kontenerem modyfikowalnym (innym niż const
) jakiegokolwiek rodzaju, który obsługuje begin()
i cbegin()
.
auto i1 = Container.begin();
// i1 is Container<T>::iterator
auto i2 = Container.cbegin();
// i2 is Container<T>::const_iterator
cend
Zwraca iterator, który adresuje lokalizację const
tuż poza ostatnim elementem w zakresie.
const_iterator cend() const;
Wartość zwracana
Iterator dostępu swobodnego, który wskazuje tuż za koniec zakresu.
Uwagi
cend
służy do testowania, czy iterator przeszedł koniec jego zakresu.
Możesz użyć tej funkcji składowej zamiast funkcji składowej end()
, aby zagwarantować, że zwracana wartość to const_iterator
. Zazwyczaj jest używany w połączeniu ze auto
słowem kluczowym potrącenia typu, jak pokazano w poniższym przykładzie. W tym przykładzie rozważmy Container
, aby być kontenerem modyfikowalnym (innym niż const
) jakiegokolwiek rodzaju, który obsługuje end()
i cend()
.
auto i1 = Container.end();
// i1 is Container<T>::iterator
auto i2 = Container.cend();
// i2 is Container<T>::const_iterator
Wartość zwracana przez cend
nie powinna być wyłuszczone.
clear
Usuwa wszystkie elementy elementu deque
.
void clear();
Przykład
// 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
Typ, który udostępnia iterator dostępu losowego, który może uzyskiwać dostęp do elementu i odczytywać go const
w elemecie deque
.
typedef implementation-defined const_iterator;
Uwagi
Nie można użyć typu const_iterator
do modyfikowania wartości elementu.
Przykład
Zobacz przykład dla elementu back
.
const_pointer
Dostarcza wskaźnik do const
elementu w elemecie deque
.
typedef typename Allocator::const_pointer const_pointer;
Uwagi
Nie można użyć typu const_pointer
do modyfikowania wartości elementu. Element iterator
jest częściej używany do uzyskiwania deque
dostępu do elementu.
const_reference
Typ, który zawiera odwołanie do elementu przechowywanego const
w deque
obiekcie do odczytu i wykonywania const
operacji.
typedef typename Allocator::const_reference const_reference;
Uwagi
Nie można użyć typu const_reference
do modyfikowania wartości elementu.
Przykład
// 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
Typ, który udostępnia iterator dostępu losowego, który może odczytywać dowolny const
element w obiekcie deque
.
typedef std::reverse_iterator<const_iterator> const_reverse_iterator;
Uwagi
Typ const_reverse_iterator
nie może modyfikować wartości elementu i jest używany do iterowania w odwrotnej deque
części.
Przykład
Zapoznaj się z przykładem rbegin
sposobu deklarowania i używania iteratora.
crbegin
const
Zwraca iterator do pierwszego elementu w odwróconym deque
obiekcie .
const_reverse_iterator crbegin() const;
Wartość zwracana
Odwrotny const
iterator dostępu losowego odnoszący się do pierwszego elementu w odwróconym deque
lub odnoszącym się do tego, co było ostatnim elementem w niewróceniu deque
.
Uwagi
Przy użyciu wartości zwracanej crbegin
deque
obiektu nie można modyfikować.
Przykład
// 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
const
Zwraca iterator, który odnosi się do lokalizacji, która zakończyła się powodzeniem ostatniego elementu w odwróconym elemecie deque
.
const_reverse_iterator crend() const;
Wartość zwracana
const
Iterator odwrotnego dostępu losowego, który adresuje lokalizację, która zakończyła się powodzeniem ostatniego elementu w odwróconym deque
elemecie (lokalizacja, która poprzedzała pierwszy element w niewróconym elemecie deque
).
Uwagi
crend
jest używany z odwróconym deque
elementem, tak jak array::cend
jest używany z elementem deque
.
Przy użyciu wartości zwracanej crend
(odpowiednio zdekrementowanej) deque
nie można zmodyfikować obiektu.
crend
można użyć do sprawdzenia, czy iterator odwrotny osiągnął koniec jego deque
.
Wartość zwracana przez crend
nie powinna być wyłuszczone.
Przykład
// 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
Konstruuje deque
określony rozmiar lub elementy określonej wartości albo z określonym alokatorem albo kopią wszystkich lub części innych deque
elementów .
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);
Parametry
Al
Klasa alokatora do wykorzystania z tym obiektem.
Count
Liczba elementów w skonstruowanym deque
obiekcie .
Val
Wartość elementów w skonstruowanym deque
obiekcie .
Right
Element deque
, którego konstrukcja deque
ma być kopią.
First
Pozycja pierwszego elementu w zakresie elementów do skopiowania.
Last
Położenie pierwszego elementu poza zakresem elementów do skopiowania.
IList
Element initializer_list
do skopiowania.
Uwagi
Wszystkie konstruktory przechowują obiekt alokatora (Al
) i inicjują obiekt deque
.
Pierwsze dwa konstruktory określają pusty początkowy ; deque
drugi określa również typ alokatora (_Al
) do użycia.
Trzeci konstruktor określa powtórzenie określonej liczby (count
) elementów wartości domyślnej dla klasy Type
.
Czwarte i piąte konstruktory określają powtórzenieCount
() elementów wartości val
.
Szósty konstruktor określa kopię elementu deque
Right
.
Siódme i ósme konstruktory kopiują zakres [First, Last)
deque
wartości .
Siódmy konstruktor przenosi element deque
Right
.
Ósmy konstruktor kopiuje zawartość obiektu initializer_list
.
Żaden z konstruktorów nie wykonuje żadnych tymczasowych reallocations.
Przykład
// 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
Typ, który zapewnia różnicę między dwoma iteratorami odwołującymi się do elementów w ramach tego samego deque
elementu .
typedef typename Allocator::difference_type difference_type;
Uwagi
Element difference_type
można również opisać jako liczbę elementów między dwoma wskaźnikami.
Przykład
// 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
Wstawia element skonstruowany w miejscu do deque
obiektu w określonej pozycji.
iterator emplace(
const_iterator _Where,
Type&& val);
Parametry
_Where
Położenie w miejscu, w deque
którym jest wstawiany pierwszy element.
val
Wartość elementu wstawionego do elementu deque
.
Wartość zwracana
Funkcja zwraca iterator wskazujący położenie, w którym nowy element został wstawiony do elementu deque
.
Uwagi
Każda operacja wstawiania może być kosztowna, zobacz deque
omówienie deque
wydajności.
Przykład
// 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
Dodaje element skonstruowany na końcu elementu deque
.
void emplace_back(Type&& val);
Parametry
val
Element dodany na końcu elementu deque
.
Przykład
// 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
Dodaje element skonstruowany na końcu elementu deque
.
void emplace_front(Type&& val);
Parametry
val
Element dodany na początku elementu deque
.
Przykład
// 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
Sprawdza, czy element deque
jest pusty.
bool empty() const;
Wartość zwracana
true
jeśli wartość deque
jest pusta; false
jeśli element deque
nie jest pusty.
Przykład
// 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
Zwraca iterator, który adresuje lokalizację, która zakończyła się powodzeniem ostatniego elementu w elemecie deque
.
const_iterator end() const;
iterator end();
Wartość zwracana
Iterator dostępu losowego, który adresuje lokalizację, która zakończyła się powodzeniem ostatniego elementu w elemecie deque
. Jeśli wartość jest pusta deque
, to deque::end == deque::begin
.
Uwagi
end
służy do testowania, czy iterator osiągnął koniec jego deque
.
Przykład
// 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
Usuwa element lub zakres elementów z deque
określonych pozycji.
iterator erase(iterator _Where);
iterator erase(iterator first, iterator last);
Parametry
_Where
Pozycja elementu, który ma zostać usunięty z elementu deque
.
first
Pozycja pierwszego elementu usuniętego z elementu deque
.
last
Pozycja tuż poza ostatnim elementem usuniętym z elementu deque
.
Wartość zwracana
Iterator dostępu losowego, który wyznacza pierwszy element pozostały poza usuniętymi elementami lub wskaźnik na końcu deque
elementu , jeśli taki element nie istnieje.
Uwagi
erase
nigdy nie zgłasza wyjątku.
Przykład
// 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
Zwraca odwołanie do pierwszego elementu w elemencie deque
.
reference front();
const_reference front() const;
Wartość zwracana
deque
Jeśli element jest pusty, zwracanie jest niezdefiniowane.
Uwagi
Jeśli zwracana wartość front
elementu jest przypisana do const_reference
obiektu , deque
nie można zmodyfikować obiektu. Jeśli wartość zwracana front
obiektu jest przypisana do reference
obiektu , deque
można go zmodyfikować.
Podczas kompilowania przy użyciu _ITERATOR_DEBUG_LEVEL
wartości zdefiniowanej jako 1 lub 2 wystąpi błąd środowiska uruchomieniowego, jeśli spróbujesz uzyskać dostęp do elementu w pustym deque
elemecie . Aby uzyskać więcej informacji, zobacz Sprawdzone iteratory .
Przykład
// 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
Zwraca kopię obiektu alokatora używanego do konstruowania obiektu deque
.
Allocator get_allocator() const;
Wartość zwracana
Alokator używany przez element deque
.
Uwagi
Alokatory dla deque
klasy określają sposób zarządzania magazynem przez klasę. Domyślne alokatory dostarczane z klasami kontenerów biblioteki standardowej języka C++ są wystarczające dla większości potrzeb programistycznych. Pisanie i używanie własnej klasy alokatora jest zaawansowanym tematem języka C++.
Przykład
// 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
Wstawia element lub kilka elementów lub zakres elementów do deque
określonego położenia.
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);
Parametry
Where
Pozycja w miejscu docelowym deque
, w którym wstawiono pierwszy element.
Val
Wartość elementu wstawionego do elementu deque
.
Count
Liczba elementów wstawionych do elementu deque
.
First
Pozycja pierwszego elementu w zakresie elementów w argumencie deque
do skopiowania.
Last
Pozycja pierwszego elementu poza zakresem elementów w argumencie deque
do skopiowania.
IList
initializer_list
Elementy do wstawienia.
Wartość zwracana
Pierwsze dwie funkcje wstawiania zwracają iterator wskazujący położenie, w którym nowy element został wstawiony do elementu deque
.
Uwagi
Każda operacja wstawiania może być kosztowna.
iterator
Typ, który udostępnia iterator dostępu losowego, który może odczytywać lub modyfikować dowolny element w obiekcie deque
.
typedef implementation-defined iterator;
Uwagi
iterator
Typ może służyć do modyfikowania wartości elementu.
Przykład
Zobacz przykład dla elementu begin
.
max_size
Zwraca maksymalną długość obiektu deque
.
size_type max_size() const;
Wartość zwracana
Maksymalna możliwa długość obiektu deque
.
Przykład
// 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[]
Zwraca odwołanie do deque
elementu w określonej pozycji.
reference operator[](size_type pos);
const_reference operator[](size_type pos) const;
Parametry
pos
Położenie deque
elementu do przywołowania.
Wartość zwracana
Odwołanie do elementu, którego pozycja jest określona w argumencie. Jeśli określona pozycja jest większa niż rozmiar deque
elementu , wynik jest niezdefiniowany.
Uwagi
Jeśli zwracana wartość operator[]
elementu jest przypisana do const_reference
obiektu , deque
nie można zmodyfikować obiektu. Jeśli wartość zwracana operator[]
obiektu jest przypisana do reference
obiektu , deque
można go zmodyfikować.
Podczas kompilacji przy użyciu _ITERATOR_DEBUG_LEVEL
zdefiniowanej jako 1 lub 2 wystąpi błąd środowiska uruchomieniowego, jeśli spróbujesz uzyskać dostęp do elementu poza granicami deque
. Aby uzyskać więcej informacji, zobacz Sprawdzone iteratory .
Przykład
// 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=
Zastępuje elementy tego deque
elementu przy użyciu elementów z innego deque
elementu .
deque& operator=(const deque& right);
deque& operator=(deque&& right);
Parametry
right
Element deque
, który udostępnia nową zawartość.
Uwagi
Pierwsza przesłonięć elementy do tej deque
wartości z right
, źródła przypisania. Drugie zastąpienie przenosi elementy do tego deque
elementu z right
.
Elementy zawarte w tym deque
przed wykonaniem operatora zostaną usunięte.
Przykład
// 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
Dostarcza wskaźnik do elementu w elemecie deque
.
typedef typename Allocator::pointer pointer;
Uwagi
pointer
Typ może służyć do modyfikowania wartości elementu. Element iterator
jest częściej używany do uzyskiwania deque
dostępu do elementu.
pop_back
Usuwa element na końcu elementu deque
.
void pop_back();
Uwagi
Ostatni element nie może być pusty.
pop_back
nigdy nie zgłasza wyjątku.
Przykład
// 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
Usuwa element na początku elementu deque
.
void pop_front();
Uwagi
Pierwszy element nie może być pusty.
pop_front
nigdy nie zgłasza wyjątku.
Przykład
// 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
Dodaje element na końcu elementu deque
.
void push_back(const Type& val);
void push_back(Type&& val);
Parametry
val
Element dodany na końcu elementu deque
.
Uwagi
Jeśli zgłaszany jest wyjątek, deque
pozostaje pozostawiony bez myślenia, a wyjątek zostanie ponownie zwrócony.
push_front
Dodaje element na początku elementu deque
.
void push_front(const Type& val);
void push_front(Type&& val);
Parametry
val
Element dodany na początku elementu deque
.
Uwagi
Jeśli zgłaszany jest wyjątek, deque
pozostaje pozostawiony bez myślenia, a wyjątek zostanie ponownie zwrócony.
Przykład
// 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
Zwraca iterator do pierwszego elementu w odwróconym deque
obiekcie .
const_reverse_iterator rbegin() const;
reverse_iterator rbegin();
Wartość zwracana
Odwrotny iterator dostępu losowego odnoszący się do pierwszego elementu w odwróconym deque
lub odnoszącym się do tego, co było ostatnim elementem w niewróceniu deque
.
Uwagi
rbegin
jest używany z odwróconym deque
elementem, tak jak begin
jest używany z elementem deque
.
Jeśli zwracana wartość rbegin
elementu jest przypisana do const_reverse_iterator
obiektu , deque
nie można zmodyfikować obiektu. Jeśli wartość zwracana rbegin
obiektu jest przypisana do reverse_iterator
obiektu , deque
można go zmodyfikować.
rbegin
może służyć do iterowania przez deque
tyły.
Przykład
// 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
Typ, który zawiera odwołanie do elementu przechowywanego w obiekcie deque
.
typedef typename Allocator::reference reference;
Przykład
// 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
Zwraca iterator, który adresuje lokalizację, która zakończyła się powodzeniem ostatniego elementu w odwróconym elemecie deque
.
const_reverse_iterator rend() const;
reverse_iterator rend();
Wartość zwracana
Iterator odwrotnego dostępu losowego, który adresuje lokalizację, która zakończyła się powodzeniem ostatniego elementu w odwróconym deque
elemecie (lokalizacja, która poprzedzała pierwszy element w niewróconym elemecie deque
).
Uwagi
rend
jest używany z odwróconym deque
elementem, tak jak end
jest używany z elementem deque
.
Jeśli zwracana wartość rend
elementu jest przypisana do const_reverse_iterator
obiektu , deque
nie można zmodyfikować obiektu. Jeśli wartość zwracana rend
obiektu jest przypisana do reverse_iterator
obiektu , deque
można go zmodyfikować.
rend
można użyć do sprawdzenia, czy iterator odwrotny osiągnął koniec jego deque
.
Wartość zwracana przez rend
nie powinna być wyłuszczone.
Przykład
// 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
Określa nowy rozmiar elementu deque
.
void resize(size_type _Newsize);
void resize(size_type _Newsize, Type val);
Parametry
_Newsize
Nowy rozmiar obiektu deque
.
val
Wartość nowych elementów, które mają zostać dodane do deque
elementu , jeśli nowy rozmiar jest większy niż rozmiar oryginalny. Jeśli wartość zostanie pominięta, nowe elementy zostaną przypisane do wartości domyślnej klasy.
Uwagi
Jeśli wartość parametru jest mniejsza niż deque
, elementy są dodawane do size
elementu , dopóki nie osiągnie rozmiaru _Newsize
.deque
_Newsize
Jeśli wartość parametru deque
size
jest większa niż _Newsize
, elementy znajdujące się najbliżej końca deque
obiektu zostaną usunięte deque
do momentu osiągnięcia rozmiaru _Newsize
.
Jeśli obecny rozmiar obiektu deque
jest taki sam jak _Newsize
, nie zostanie podjęta żadna akcja.
size
odzwierciedla bieżący rozmiar elementu deque
.
Przykład
// 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
Typ, który udostępnia iterator dostępu losowego, który może odczytywać lub modyfikować element w odwróconym deque
obiekcie .
typedef std::reverse_iterator<iterator> reverse_iterator;
Uwagi
Typ reverse_iterator
jest używany do iterowania przez element deque
.
Przykład
Zobacz przykład rbegin.
shrink_to_fit
Odrzuca nadmiarową pojemność.
void shrink_to_fit();
Uwagi
Nie ma przenośnego sposobu określenia, czy shrink_to_fit
zmniejsza ilość miejsca używanego przez program deque
.
Przykład
// 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
Zwraca liczbę elementów w elem.deque
size_type size() const;
Wartość zwracana
Bieżąca długość obiektu deque
.
Przykład
// 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
Typ, który zlicza liczbę elementów w obiekcie deque
.
typedef typename Allocator::size_type size_type;
Przykład
Zobacz przykład dla elementu size
.
swap
Wymienia elementy dwóch deques.
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);
Parametry
right
Podanie deque
elementów do zamiany lub deque
elementów, których elementy mają być wymieniane z elementami deque
left
.
left
Element, deque
którego elementy mają być wymieniane z elementami deque
right
.
Przykład
// 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
Typ reprezentujący typ danych przechowywany w obiekcie deque
.
typedef typename Allocator::value_type value_type;
Uwagi
value_type
jest synonimem parametru Type
szablonu .
Przykład
// 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
Zobacz też
Bezpieczeństwo wątku w standardowej bibliotece C++
Dokumentacja standardowej biblioteki C++