Clase deque

Organiza los elementos de un tipo determinado en una organización lineal y, como un vector, permite un acceso aleatorio rápido a cualquier elemento y, una inserción y eliminación eficaces al final del contenedor. Sin embargo, a diferencia de un vector, la clase deque también admite la inserción y la eliminación eficaces al principio del contenedor.

Sintaxis

template <class Type, class Allocator =allocator<Type>>
class deque

Parámetros

Type
Tipo de datos de elementos que se va a almacenar en la deque.

Allocator
Tipo que representa el objeto asignador almacenado que encapsula los detalles acerca de la asignación y desasignación de memoria de deque. Este argumento es opcional y el valor predeterminado es allocator<Type>.

Comentarios

En general, la elección del tipo de contenedor se debe tomar según el tipo de búsqueda y de inserción que necesite la aplicación. Vectors deben ser el contenedor preferido para administrar una secuencia cuando escasee el acceso aleatorio a algún elemento y solo sea necesario realizar inserciones o eliminaciones de elementos al final de una secuencia. El rendimiento del contenedor de lista es superior cuando las inserciones y eliminaciones eficaces (en tiempo constante) en cualquier ubicación dentro de la secuencia son importantes. Esas operaciones en medio de la secuencia requieren copias y asignaciones de elementos proporcionales al número de elementos de la secuencia (tiempo lineal).

La reasignación Deque se realiza cuando una función miembro debe insertar o borrar elementos de la secuencia:

  • Si un elemento se inserta en una secuencia vacía, o si un elemento se borra para dejar una secuencia vacía, los iteradores anteriores devueltos por begin y end dejan de ser válidos.

  • Si se inserta un elemento en la primera posición del deque, todos los iteradores, pero ninguna referencia, que designan elementos existentes dejan de ser válidos.

  • Si se inserta un elemento al final del deque, end y todos los iteradores, pero ninguna referencia, que designan elementos existentes dejan de ser válidos.

  • Si se borra un elemento al principio del deque, solo el iterador y las referencias al elemento borrado dejan de ser válidos.

  • Si se borra el último elemento del final del deque, solo el iterador al elemento final y las referencias al elemento borrado dejan de ser válidos.

De lo contrario, al insertar o borrar un elemento se invalidan todos los iteradores y referencias.

Miembros

Constructores

Nombre Descripción
deque Construye un objeto deque. Se proporcionan varios constructores para configurar el contenido del nuevo deque de maneras diferentes: vacío; cargado con un número especificado de elementos vacíos; contenido movido o copiado de otro deque; contenido copiado o movido mediante un iterador; y un elemento copiado en el dequecount veces. Algunos de los constructores permiten usar un allocator personalizado para crear elementos.

Typedefs

Nombre Descripción
allocator_type Tipo que representa la clase allocator para el objeto deque.
const_iterator Tipo que proporciona un iterador de acceso aleatorio que puede obtener acceso a elementos de deque como const y leerlos.
const_pointer Tipo que proporciona un puntero a un elemento de deque como const.
const_reference Tipo que proporciona una referencia a un elemento de deque para leer y otras operaciones como const.
const_reverse_iterator Tipo que proporciona un iterador de acceso aleatorio que puede obtener acceso a elementos del deque como const y leerlos. El deque se ve en orden inverso. Para obtener más información, consulte la Class reverse_iterator.
difference_type Tipo que proporciona la diferencia entre dos iteradores de acceso aleatorio que hacen referencia a elementos del mismo deque.
iterator Tipo que proporciona un iterador de acceso aleatorio que puede leer o modificar cualquier elemento de deque.
pointer Tipo que proporciona un puntero a un elemento de deque.
reference Tipo que proporciona una referencia a un elemento almacenado en un deque.
reverse_iterator Tipo que proporciona un iterador de acceso aleatorio que puede leer o modificar un elemento de deque. El deque se ve en orden inverso.
size_type Tipo que cuenta el número de elementos de un deque.
value_type Tipo que representa el tipo de datos almacenados en un deque.

Funciones

Nombre Descripción
assign Borra elementos de un deque y copia una nueva secuencia de elementos al deque de destino.
at Devuelve una referencia al elemento situado en una ubicación especificada del deque.
back Devuelve una referencia al último elemento del deque.
begin Devuelve un iterador de acceso aleatorio que direcciona el primer elemento del deque.
cbegin Un iterador const al primer elemento del rango en el deque.
cend Devuelve un iterador const de acceso aleatorio que apunta justo después del final del deque.
clear Borra todos los elementos de un deque.
crbegin Devuelve un iterador const constante de acceso aleatorio al primer elemento de deque que se ve en orden inverso.
crend Devuelve un iterador const constante de acceso aleatorio al primer elemento de deque que se ve en orden inverso.
emplace Inserta en una posición especificada del deque un elemento construido en contexto.
emplace_back Agrega un elemento construido en contexto al final del deque.
emplace_front Agrega un elemento construido en contexto al principio del deque.
empty Devuelve true si el deque contiene cero elementos y false si contiene uno o más elementos.
end Devuelve un iterador de acceso aleatorio que apunta justo después del final del deque.
erase Quita un elemento o un intervalo de elementos de un deque de las posiciones especificadas.
front Devuelve una referencia al primer elemento de deque.
get_allocator Devuelve una copia del objeto allocator utilizado para construir el deque.
insert Inserta un elemento, varios elementos o un intervalo de elementos en una posición especificada del deque.
max_size Devuelve la longitud máxima posible del deque.
pop_back Borra el elemento situado al final del deque.
pop_front Borra el elemento situado al principio del deque.
push_back Agrega un elemento al final del deque.
push_front Agrega un elemento al principio del deque.
rbegin Devuelve un iterador de acceso aleatorio al primer elemento de deque invertido.
rend Devuelve un iterador de acceso aleatorio que apunta justo detrás del último elemento de deque invertido.
resize Especifica un nuevo tamaño para un deque.
shrink_to_fit Descarta el exceso de capacidad.
size Devuelve el número de elementos de deque.
swap Intercambia los elementos de dos deque.

Operadores

Nombre Descripción
operator[] Devuelve una referencia al elemento del deque en una posición especificada.
operator= Reemplaza los elementos del deque con una copia de otro deque.

allocator_type

Tipo que representa la clase de asignador del objeto deque.

typedef Allocator allocator_type;

Comentarios

allocator_type es un sinónimo del parámetro de plantilla Allocator.

Ejemplo

Vea el ejemplo de get_allocator.

assign

Borra elementos de un deque y copia un nuevo conjunto de elementos al deque de destino.

template <class InputIterator>
void assign(
    InputIterator First,
    InputIterator Last);

void assign(
    size_type Count,
    const Type& Val);

void assign(initializer_list<Type> IList);

Parámetros

First
Posición del primer elemento en el intervalo de elementos que se va a copiar de la lista de argumentos deque.

Last
Posición del primer elemento que se encuentra más allá del intervalo de elementos que se va a copiar del argumento deque.

Count
Número de copias de un elemento que se va a insertar en la deque.

Val
Valor del elemento insertado en el deque.

IList
initializer_list insertado en deque.

Comentarios

Después de borrar los elementos existentes en el deque de destino, assign inserta un intervalo especificado de elementos del deque original o de otro deque en el deque de destino, o inserta copias de un nuevo elemento de un valor especificado en el deque de destino.

Ejemplo

// 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

Devuelve una referencia al elemento situado en una ubicación especificada del deque.

reference at(size_type pos);

const_reference at(size_type pos) const;

Parámetros

pos
Subíndice (o número de posición) del elemento al que se va a hacer referencia en el deque.

Valor devuelto

Si pos es mayor que el tamaño del deque, at inicia una excepción.

Comentarios

Si el valor devuelto de at se asigna a un const_reference, deque no se puede modificar. Si el valor devuelto de at se asigna a un reference, deque sí se puede modificar.

Ejemplo

// 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

Devuelve una referencia al último elemento del deque.

reference back();
const_reference back() const;

Valor devuelto

El último elemento de deque. Si deque está vacío, el valor devuelto es indefinido.

Comentarios

Si el valor devuelto de back se asigna a un const_reference, deque no se puede modificar. Si el valor devuelto de back se asigna a un reference, deque sí se puede modificar.

Al compilar con _ITERATOR_DEBUG_LEVEL definido como 1 o 2, se producirá un error en tiempo de ejecución si intenta obtener acceso a un elemento de una deque vacía. Vea Iteradores comprobados para obtener más información.

Ejemplo

// 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

Devuelve un iterador que direcciona el primer elemento del deque.

const_iterator begin() const;
iterator begin();

Valor devuelto

Un iterador de acceso aleatorio que se dirige al primer elemento del deque o a la ubicación que sigue a un deque vacío.

Comentarios

Si el valor devuelto de begin se asigna a un const_iterator, deque no se puede modificar. Si el valor devuelto de begin se asigna a un iterator, deque sí se puede modificar.

Ejemplo

// 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

Devuelve un iterador const que direcciona el primer elemento del intervalo.

const_iterator cbegin() const;

Valor devuelto

Iterador const de acceso aleatorio que apunta al primer elemento del intervalo o la ubicación situada más allá del final de un intervalo vacío (para un intervalo vacío, cbegin() == cend()).

Comentarios

Con el valor devuelto de cbegin, los elementos del intervalo no se pueden modificar.

Se puede usar esta función miembro en lugar de la función miembro begin() para garantizar que el valor devuelto es const_iterator. Normalmente, se usa junto con la palabra clave de deducción de tipos auto, como se muestra en el ejemplo siguiente. En el ejemplo se considera que Container es un contenedor modificable (distinto de const) de cualquier naturaleza que admite begin() y cbegin().

auto i1 = Container.begin();
// i1 is Container<T>::iterator
auto i2 = Container.cbegin();

// i2 is Container<T>::const_iterator

cend

Devuelve un iterador const que direcciona la ubicación situada más allá del último elemento de un intervalo.

const_iterator cend() const;

Valor devuelto

Iterador de acceso aleatorio que apunta justo después del final del intervalo.

Comentarios

cend se usa para probar si un iterador ha sobrepasado el final de su intervalo.

Se puede usar esta función miembro en lugar de la función miembro end() para garantizar que el valor devuelto es const_iterator. Normalmente, se usa junto con la palabra clave de deducción de tipos auto, como se muestra en el ejemplo siguiente. En el ejemplo se considera que Container es un contenedor modificable (distinto de const) de cualquier naturaleza que admite end() y cend().

auto i1 = Container.end();
// i1 is Container<T>::iterator
auto i2 = Container.cend();

// i2 is Container<T>::const_iterator

El valor devuelto por cend no se debe desreferenciar.

clear

Borra todos los elementos de un deque.

void clear();

Ejemplo

// 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

Tipo que proporciona un iterador de acceso aleatorio que puede acceder a un elemento const de la deque y leerlo.

typedef implementation-defined const_iterator;

Comentarios

Un tipo const_iterator no se puede utilizar para modificar el valor de un elemento.

Ejemplo

Vea el ejemplo de back.

const_pointer

Proporciona un puntero a un elemento const de una deque.

typedef typename Allocator::const_pointer const_pointer;

Comentarios

Un tipo const_pointer no se puede utilizar para modificar el valor de un elemento. Un iterator se usa normalmente para tener acceso a un elemento deque.

const_reference

Tipo que proporciona una referencia a un elemento const almacenado en un deque para leer y realizar operaciones const.

typedef typename Allocator::const_reference const_reference;

Comentarios

Un tipo const_reference no se puede utilizar para modificar el valor de un elemento.

Ejemplo

// 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

Tipo que proporciona un iterador de acceso aleatorio que puede leer cualquier elemento const en el deque.

typedef std::reverse_iterator<const_iterator> const_reverse_iterator;

Comentarios

Un tipo const_reverse_iterator no puede modificar el valor de un elemento y se usa para iterar por deque en orden inverso.

Ejemplo

Vea el ejemplo de rbegin para obtener un ejemplo de cómo declarar y usar iterator.

crbegin

Devuelve un iterador const al primer elemento en un deque invertido.

const_reverse_iterator crbegin() const;

Valor devuelto

Un iterador inverso const de acceso aleatorio que se dirige al primer elemento de un deque inverso o al que fue el último elemento del deque sin invertir.

Comentarios

Con el valor devuelto de crbegin, el objeto deque no se puede modificar.

Ejemplo

// 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

Devuelve un iterador const que direcciona la ubicación que sigue al último elemento de un deque invertido.

const_reverse_iterator crend() const;

Valor devuelto

Un iterador inverso const de acceso aleatorio que se dirige a la ubicación siguiente al último elemento de un deque invertido (la ubicación que había precedido al primer elemento del deque sin invertir).

Comentarios

crend se usa con un deque invertido igual que array::cend se usa con un deque.

Con el valor devuelto de crend (adecuadamente reducido), el objeto deque no se puede modificar.

Se puede utilizar crend para comprobar si un iterador inverso llegó al final de su deque.

El valor devuelto por crend no se debe desreferenciar.

Ejemplo

// 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

Construye una deque de un tamaño específico o con elementos de un valor específico o con un asignador específico o como una copia de todo o de parte de alguna otra deque.

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);

Parámetros

Al
La clase de asignador que se usa con este objeto.

Count
Número de elementos del deque construido.

Val
Valor de los elementos del deque construido.

Right
deque del que el deque construido va a ser una copia.

First
Posición del primer elemento en el intervalo de elementos que se va a copiar.

Last
Posición del primer elemento más allá del intervalo de elementos que se va a copiar.

IList
El initializer_list que se va a copiar.

Comentarios

Todos los constructores almacenan un objeto de asignador (Al) e inicializan la deque.

Los dos primeros constructores especifican un deque inicial vacío y el segundo especifica también el tipo de asignador (_Al) que se va a usar.

El tercer constructor especifica una repetición de un número especificado (count) de elementos del valor predeterminado para la clase Type.

Los constructores cuarto y quinto especifican una repetición de elementos (Count) de valor val.

El sexto constructor especifica una copia de la dequeRight.

Los constructores séptimo y octavo copian el intervalo [First, Last) de un deque.

El séptimo constructor mueve la lista dequeRight.

El octavo constructor copia el contenido de una initializer_list.

Ninguno de los constructores realiza ninguna reasignación provisional.

Ejemplo

/ 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

Tipo que proporciona la diferencia entre dos iteradores que hacen referencia a elementos de la misma clase deque.

typedef typename Allocator::difference_type difference_type;

Comentarios

Un difference_type también se puede describir como el número de elementos entre dos punteros.

Ejemplo

// 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

Inserta en una posición especificada del deque un elemento construido en contexto.

iterator emplace(
    const_iterator _Where,
    Type&& val);

Parámetros

_Where
Posición del deque en la que se inserta el primer elemento.

val
Valor del elemento insertado en el deque.

Valor devuelto

La función devuelve un iterador que apunta a la posición en la que se insertó el nuevo elemento en el deque.

Comentarios

Las operaciones de inserción pueden ser costosas, vea deque para obtener una explicación del rendimiento de un deque.

Ejemplo

// 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

Agrega un elemento construido en contexto al final del deque.

void emplace_back(Type&& val);

Parámetros

val
El elemento que se agrega al final de la deque.

Ejemplo

// 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

Agrega un elemento construido en contexto al final del deque.

void emplace_front(Type&& val);

Parámetros

val
El elemento que se agrega al principio de deque.

Ejemplo

// 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

Comprueba si un deque está vacío.

bool empty() const;

Valor devuelto

true si deque está vacío; false si deque no está vacío.

Ejemplo

// 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

Devuelve un iterador que direcciona la ubicación que sigue al último elemento de deque.

const_iterator end() const;

iterator end();

Valor devuelto

Un iterador de acceso aleatorio que se dirige a la ubicación que sigue al último elemento de un deque. Si el deque está vacío, deque::end == deque::begin.

Comentarios

end se usa para comprobar si un iterador ha llegado al final de su deque.

Ejemplo

// 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

Quita un elemento o un intervalo de elementos de un deque de las posiciones especificadas.

iterator erase(iterator _Where);

iterator erase(iterator first, iterator last);

Parámetros

_Where
Posición del elemento que se quitará de deque.

first
Posición del primer elemento que se quitará de deque.

last
Posición inmediatamente siguiente a la del último elemento que se quitará de deque.

Valor devuelto

Un iterador de acceso aleatorio que designa el primer elemento restante después de los elementos quitados o, si no hay ningún elemento después, un puntero al final del deque.

Comentarios

erase nunca inicia una excepción.

Ejemplo

// 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

Devuelve una referencia al primer elemento de deque.

reference front();

const_reference front() const;

Valor devuelto

Si el deque está vacío, el valor devuelto es indefinido.

Comentarios

Si el valor devuelto de front se asigna a un const_reference, deque no se puede modificar. Si el valor devuelto de front se asigna a un reference, deque sí se puede modificar.

Al compilar con _ITERATOR_DEBUG_LEVEL definido como 1 o 2, se producirá un error en tiempo de ejecución si intenta obtener acceso a un elemento de una deque vacía. Vea Iteradores comprobados para obtener más información.

Ejemplo

// 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

Devuelve una copia del objeto de asignador usado para construir deque.

Allocator get_allocator() const;

Valor devuelto

Asignador usado por deque.

Comentarios

Los asignadores de la clase deque especifican la forma en que la clase administra el almacenamiento. Los asignadores predeterminados proporcionados con las clases contenedoras de la biblioteca estándar de C++ son suficientes para la mayoría de las necesidades de programación. La escritura y el uso de sus propias clases de asignador son temas avanzados de C++.

Ejemplo

// 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

Inserta un elemento, varios elementos o un intervalo de elementos en el deque en una posición especificada.

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);

Parámetros

Where
La posición de la clase deque de destino donde se inserta el primer elemento.

Val
Valor del elemento insertado en el deque.

Count
Número de elementos que se van a insertar en la deque.

First
Posición del primer elemento en el intervalo de elementos de la deque de argumentos que se va a copiar.

Last
Posición del primer elemento más allá del intervalo de elementos de la deque de argumentos que se va a copiar.

IList
El initializer_list de elementos que se van a insertar.

Valor devuelto

Las dos primeras funciones insert devuelven un iterador que apunta a la posición donde se insertó el nuevo elemento en la deque.

Comentarios

Las operaciones de inserción pueden ser muy costosas.

iterator

Tipo que proporciona un iterador de acceso aleatorio que puede leer o modificar cualquier elemento de deque.

typedef implementation-defined iterator;

Comentarios

Se puede usar un tipo iterator para modificar el valor de un elemento.

Ejemplo

Vea el ejemplo de begin.

max_size

Devuelve la longitud máxima del deque.

size_type max_size() const;

Valor devuelto

Longitud máxima posible de deque.

Ejemplo

// 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[]

Devuelve una referencia al elemento del deque en una posición especificada.

reference operator[](size_type pos);

const_reference operator[](size_type pos) const;

Parámetros

pos
La posición del elemento deque al que se va a hacer referencia.

Valor devuelto

Una referencia al elemento cuya posición se especifica en el argumento. Si la posición especificada es mayor que el tamaño del deque, el resultado no está definido.

Comentarios

Si el valor devuelto de operator[] se asigna a un const_reference, deque no se puede modificar. Si el valor devuelto de operator[] se asigna a un reference, deque sí se puede modificar.

Al compilar con _ITERATOR_DEBUG_LEVEL definido como 1 o 2, se produce un error de tiempo de ejecución si intenta tener acceso a un elemento fuera de los límites deque. Vea Iteradores comprobados para obtener más información.

Ejemplo

// 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=

Reemplaza los elementos de este deque con los elementos de otro deque.

deque& operator=(const deque& right);

deque& operator=(deque&& right);

Parámetros

right
deque que proporciona el nuevo contenido.

Comentarios

La primera invalidación copia elementos en este deque desde right, el origen de la asignación. La segunda invalidación mueve elementos a este deque desde right.

Se quitan los elementos contenidos en este deque antes de que se ejecute el operador.

Ejemplo

// 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

Proporciona un puntero a un elemento de un deque.

typedef typename Allocator::pointer pointer;

Comentarios

Se puede usar un tipo pointer para modificar el valor de un elemento. Un iterator se usa normalmente para tener acceso a un elemento deque.

pop_back

Elimina el elemento situado al final del deque.

void pop_back();

Comentarios

El último elemento no debe estar vacío. pop_back nunca inicia una excepción.

Ejemplo

// 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

Elimina el elemento situado al principio del deque.

void pop_front();

Comentarios

El primer elemento no debe estar vacío. pop_front nunca inicia una excepción.

Ejemplo

// 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

Agrega un elemento al final del deque.

void push_back(const Type& val);

void push_back(Type&& val);

Parámetros

val
El elemento que se agrega al final de la deque.

Comentarios

Si se lanza una excepción, la deque se deja sin modificar y se vuelve a lanzar la excepción.

push_front

Agrega un elemento al principio del deque.

void push_front(const Type& val);
void push_front(Type&& val);

Parámetros

val
El elemento que se agrega al principio de deque.

Comentarios

Si se lanza una excepción, la deque se deja sin modificar y se vuelve a lanzar la excepción.

Ejemplo

// 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

Devuelve un iterador al primer elemento en un deque inverso.

const_reverse_iterator rbegin() const;

reverse_iterator rbegin();

Valor devuelto

Un iterador inverso de acceso aleatorio que se dirige al primer elemento de un deque inverso o al que fue el último elemento del deque sin invertir.

Comentarios

rbegin se usa con un deque invertido igual que begin se usa con un deque.

Si el valor devuelto de rbegin se asigna a un const_reverse_iterator, deque no se puede modificar. Si el valor devuelto de rbegin se asigna a un reverse_iterator, deque sí se puede modificar.

rbegin puede usarse para iterar un objeto deque hacia atrás.

Ejemplo

// 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

Tipo que proporciona una referencia a un elemento almacenado en un deque.

typedef typename Allocator::reference reference;

Ejemplo

// 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

Devuelve un iterador que direcciona la ubicación que sigue al último elemento de deque invertido.

const_reverse_iterator rend() const;

reverse_iterator rend();

Valor devuelto

Un iterador inverso de acceso aleatorio que se dirige a la ubicación siguiente al último elemento de un deque invertido (la ubicación que había precedido al primer elemento del deque sin invertir).

Comentarios

rend se usa con un deque invertido igual que end se usa con un deque.

Si el valor devuelto de rend se asigna a un const_reverse_iterator, deque no se puede modificar. Si el valor devuelto de rend se asigna a un reverse_iterator, deque sí se puede modificar.

rend se puede usar para comprobar si un iterador inverso ha llegado al final de deque.

El valor devuelto por rend no se debe desreferenciar.

Ejemplo

// 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

Especifica un nuevo tamaño para un deque.

void resize(size_type _Newsize);

void resize(size_type _Newsize, Type val);

Parámetros

_Newsize
El nuevo tamaño de deque.

val
Valor de los nuevos elementos que se agregarán a la deque si el nuevo tamaño es mayor que el tamaño original. Si el valor se omite, a los nuevos elementos se les asigna el valor predeterminado para la clase.

Comentarios

Si el size del deque es inferior a _Newsize, los elementos se añaden al deque hasta que alcanza el tamaño _Newsize.

Si el deque de size es mayor que _Newsize, los elementos más cercanos al final del deque se eliminan hasta que el deque alcanza el tamaño _Newsize.

Si el tamaño actual de la deque es el mismo que _Newsize, no se toma ninguna acción.

size refleja el tamaño actual de la deque.

Ejemplo

// 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

Tipo que proporciona un iterador de acceso aleatorio que puede leer o modificar un elemento de un deque invertido.

typedef std::reverse_iterator<iterator> reverse_iterator;

Comentarios

Los tipos reverse_iterator se utilizan para procesar una iteración en deque.

Ejemplo

Vea el ejemplo de rbegin.

shrink_to_fit

Descarta el exceso de capacidad.

void shrink_to_fit();

Comentarios

No hay ninguna manera portátil de determinar si shrink_to_fit reduce el almacenamiento usado por un deque.

Ejemplo

// 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

Devuelve el número de elementos de deque.

size_type size() const;

Valor devuelto

Longitud actual de deque.

Ejemplo

// 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

Tipo que cuenta el número de elementos de un deque.

typedef typename Allocator::size_type size_type;

Ejemplo

Vea el ejemplo de size.

swap

Intercambia los elementos de dos 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);

Parámetros

right
deque que proporciona los elementos que se van a intercambiar, o deque cuyos elementos se van a intercambiar con los de dequeleft.

left
Una deque cuyos elementos se van a intercambiar con los de la lista dequeright.

Ejemplo

// 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

Tipo que representa el tipo de datos almacenados en un deque.

typedef typename Allocator::value_type value_type;

Comentarios

value_type es un sinónimo del parámetro de plantilla Type.

Ejemplo

// 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

Vea también

Seguridad para subprocesos en la biblioteca estándar de C++
Referencia de biblioteca estándar de C++