Fichero colaVector.hpp
#ifndef __COLA_VECTOR_HPP__
#define __COLA_VECTOR_HPP__
#include
#include
#include "colainterfaz.hpp"
/*!\brief Espacio de nombres para la asignatura Estructura de datos.*/
namespace ed
{
//using std::vector;
template
class Cola:public ColaInterfaz
{
public:
// constructor por defecto
Cola(unsigned int limite=10)
{
assert(limite>0);
_elementos.resize(limite);
_limite=limite;
_cabeza=0;
_indice=0;
}
// constructor copia
Cola(const Cola &c)
{
_elementos.resize(c._elementos.size());
_cabeza=c._cabeza;
_indice=c._indice;
_limite=c._limite;
_elementos=c._elementos; // es un vector STL
}
// no hace falta crearlas para esta implementación
/*
// Sobrecarga del operador de asignación con una cola
Cola &operator=(const Cola &c) throw()
{
_cabeza=c._cabeza;
_indice=c._indice;
_limite=c._limite;
_elementos=c._elementos;
}
// Destructor
~Cola()
{
}
*/
void insertar(const G &x) throw()
{
assert(not estaLlena());
_elementos[ _indice % _limite ]= x;
_indice=_indice+1;
}
void eliminar() throw ()
{
assert(not estaVacia());
_cabeza=_cabeza+1;
}
const G & cabeza() const throw ()
{
assert(not estaVacia());
return _elementos[_cabeza%_limite];
}
bool estaVacia () const throw ()
{
return (_indice==_cabeza)? true : false;
}
bool estaLlena () const throw (){
return ((_indice-_cabeza)==_limite)? true : false;
}
private:
std::vector _elementos;
unsigned int _indice;
unsigned int _cabeza;
unsigned int _limite;
};
} //namespace ed
#endif //__COLA_VECTOR_HPP__
Correcto, aunque creo que no contemplas el caso en el que al eliminar te pasas del límite. En ese caso cabeza volvería a valer 0.
ResponderEliminar