Main Page | Namespace List | Class Hierarchy | Class List | File List | Class Members | File Members

deque< T > Class Template Reference

#include <deque.h>

List of all members.

Public Types

typedef T value_type
 Nombre estándar del objeto contenido.
typedef T * pointer
 Nombre estándar del puntero al objeto contenido.
typedef T & reference
 Nombre estándar de la referencia al objeto contenido.
typedef const value_type const_value_type
 Nombre estándar del objeto contenido const.
typedef const T * const_pointer
 Nombre estándar del puntero al objeto contenido const.
typedef const T & const_reference
 Nombre estándar de la referencia al objeto contenido const.
typedef unsigned size_type
 Nombre estándar del tipo retornado por size().

Public Member Functions

 deque (size_type N)
 Constructor: Vector extendible con capacidad para almacenar "N" valores.
 ~deque ()
 Destructor.
bool empty () const
 Retorna "true" si el vector extendible está vacía.
size_type size () const
 Cantidad de valores almacenados en el vector extendible.
size_type capacity () const
 Cantidad máxima de valores que se pueden almacenar en el vector extendible.
value_typefront ()
const value_typefront () const
value_typeback ()
const value_typeback () const
value_typeoperator[] (size_type i)
value_typeoperator[] (size_type i) const
value_typeat (size_type i)
value_typeat (size_type i) const
void push_front (const value_type &val)
void push_back (const value_type &val)
void pop_front ()
void pop_back ()

Friends

class test_deque
 Datos de prueba para la clase.
template<class T>
std::istream & operator>> (std::istream &CIN, deque< T > &Q)
template<class T>
std::ostream & operator<< (std::ostream &COUT, const deque< T > &Q)
bool check_ok (const deque< T > &Q)


Detailed Description

template<class T>
class deque< T >

Vector extendible a ambos lados, almacenado en un vector circular.


Constructor & Destructor Documentation

template<class T>
void deque< T >::deque size_type  N  ) 
 

Constructor: Vector extendible con capacidad para almacenar "N" valores.

See also:
test_deque<T>::test_deque()


Member Function Documentation

template<class T>
value_type& deque< T >::at size_type  i  )  const [inline]
 

Acceso al "i"-ésimo valor almacenado en el contenedor ( const ).

  • Levanta la excepción std::out_of_range si "i" está fuera del rango válido.

template<class T>
value_type& deque< T >::at size_type  i  )  [inline]
 

Acceso al "i"-ésimo valor almacenado en el contenedor.

  • Levanta la excepción std::out_of_range si "i" está fuera del rango válido.

template<class T>
const value_type& deque< T >::back  )  const [inline]
 

Retorna una referencia constante al último valor del vector extendible.

  • El úlimo valor es el que está "al final" en el vector extendible.
    Precondition:
    !empty()
    See also:
    test_deque<T>::test_back_const()

template<class T>
value_type& deque< T >::back  )  [inline]
 

Retorna una referencia al último valor del vector extendible.

template<class T>
size_type deque< T >::capacity  )  const [inline]
 

Cantidad máxima de valores que se pueden almacenar en el vector extendible.

See also:
test_deque<T>::test_capacity()

template<class T>
bool deque< T >::empty  )  const [inline]
 

Retorna "true" si el vector extendible está vacía.

See also:
test_deque<T>::test_empty()

template<class T>
const value_type& deque< T >::front  )  const [inline]
 

Retorna una referencia constante al primer valor del vector extendible.

  • El primero valor es el que está "al frente" en el vector extendible.
    Precondition:
    !empty()
    See also:
    test_deque<T>::test_front_const()

template<class T>
value_type& deque< T >::front  )  [inline]
 

Retorna una referencia al primer valor del vector extendible.

template<class T>
value_type& deque< T >::operator[] size_type  i  )  const [inline]
 

Acceso al "i"-ésimo valor almacenado en el contenedor ( const ).

  • No levanta ninguna excepción si "i" está fuera del rango válido.

template<class T>
value_type& deque< T >::operator[] size_type  i  )  [inline]
 

Acceso al "i"-ésimo valor almacenado en el contenedor.

  • No levanta ninguna excepción si "i" está fuera del rango válido.

template<class T>
void deque< T >::pop_back  )  [inline]
 

Saca del vector extendible al valor que está al frente.

Precondition:
!empty()
See also:
test_deque<T>::test_pop_back()

template<class T>
void deque< T >::pop_front  )  [inline]
 

Saca del vector extendible al valor que está al frente.

Precondition:
!empty()
See also:
test_deque<T>::test_pop_front()

template<class T>
void deque< T >::push_back const value_type val  ) 
 

Agrega una copia de "val" al final del vector extendible.

Precondition:
size() < m_capacity
See also:
test_deque<T>::test_push_back()

template<class T>
void deque< T >::push_front const value_type val  ) 
 

Agrega una copia de "val" al principio del vector extendible.

Precondition:
size() < m_capacity
See also:
test_deque<T>::test_push_front()

template<class T>
size_type deque< T >::size  )  const [inline]
 

Cantidad de valores almacenados en el vector extendible.

See also:
test_deque<T>::test_size()


Friends And Related Function Documentation

template<class T>
bool check_ok const deque< T > &  Q  )  [friend]
 

Verifica la invariante de la clase deque<T>.

  • Regresa "true" si "*this" contiene un valor correcto.
  • Podría retornar "true" aún cuando "*this" tenga su valor corrupto.
  • Podría no retornar si "*this" tiene su valor corrupto.
  • http://www.di-mare.com/adolfo/binder/c04.htm#sc11
    See also:
    deque<T>::ok( )
    Rep: Diagrama de la clase
        +-------------------------------+ +-----------------------------------+
        | m_vec[]                       | |   m_vec[]       m_capacity==7     |
        |   ||                          | |     ||                            |
        |   \/ <1> <2>==m_front    <6>  | |     \/        m_front==<5> <6>    |
        | +---+---+---+---+---+---+---+ | |   +---+---+---+---+---+---+---+   |
        | | _ | _ | 3 | 9 | 5 | 6 | _ | | |   | 5 | 6 | _ | _ | _ | 3 | 9 |   |
        | +---+---+---+---+---+---+---+ | |   +---+---+---+---+---+---+---+   |
        |  <0>      |-----------+       | | +-------+               |-------+ |
        | m_front---+  #2  #3  #4       | | |  #3  #4     m_front---+  #2   | |
        |                               | | |                               | |
        |            m_size == 4        | | +-<-<-----------------------<-<-+ |
        +-------------------------------+ +-----------------------------------+
    
  • Rep: http://www.di-mare.com/adolfo/binder/c03.htm#k1-Rep

Rep: Descripción en palabras
  • Los valores del vector extendible están almacenados en memoria dinámica, consecutivamente, en el vector "m_vec[]" cuyo tamaño no puede cambiar pues queda definido cómo "deque<T>::m_capacity" cuando el objeto es construido.
  • El primer valor del vector extendible siempre está almacenado en "m_vec[m_front]".
  • El último valor del vector extendible siempre está almacenado en "m_vec[ (m_front+m_size-1) % m_capacity ]".
  • En el diagrama se muestran 2 formas en que puede estar almacenado el valor de una cola Q = [3,9,5,6] con "3" al frente y "6" al final.
  • En esta implementación del vector extendible se usa un vector circular en donde los valores están almacenados desde el índice "m_front" de "m_vec[]".
  • Como siempre el "frente" del vector extendible debe estar "antes" que el "final", cuando el valor de "m_front" no es "0", porque no apunta al principio del vector, lo que ocurre es que el vector extendible está almacenado llegando al final del vector y luego volviendo al principio (wrap-around).
  • La otra forma de almacenar el vector extendible en un vector circular es usar los campos "m_front" y "m_back", pero esta implementación tiene el problema de que es necesario desperdiciar uno de los campos del vector "m_vec[]" pues de otra manera no es posible determinar si el vector extendible está lleno o vacío.


The documentation for this class was generated from the following files:
Generated on Tue Aug 21 16:47:53 2007 by  doxygen 1.4.1
Hosted by www.Geocities.ws

1