Bienvenidos sean a este post, hoy veremos otra estructura de datos.
Al igual que vimos en el post anterior, esta se la denomina como estructura de datos pero podemos considerarlo como un contenedor aunque no es independiente sino que se utiliza como envoltorio de un contenedor. Este se implementa con el uso de la libreria queue y al igual que con los contenedores es miembro del namespace std. A diferencia de stack este ingresa un elemento por un extremo y lo envia por el otro. Para implementar solamente se necesita un contenedor de secuencia con soporte de los metodos back, push y pop. Si bien pueden manejar cualquier tipo de datos, al igual que sucede con cualquier tipo de contenedor siempre deben ser del mismo tipo. Este trabaja con la mecanica FIFO, primero en entrar primero en salir por sus siglas en ingles, como en stack tampoco podemos acceder a los datos por su posicion. Para ello solamente podemos acceder a la informacion que se encuentran en los dos extremos y las acciones que usaremos son push para agregar y pop para quitar. Veamos un ejemplo para entenderlo:
#include <iostream>
#include <string.h>
#include <queue>
template < class T >
void mostrar(const std::queue< T > & q)
{
std::cout << "Frente: " << q.front() << std::endl;
std::cout << "Atras: " << q.back() << std::endl;
}
int main()
{
std::queue<std::string> coches;
coches.push("VW");
coches.push("FORD");
coches.push("VOLVO");
coches.push("FIAT");
coches.push("AUDI");
mostrar(coches);
return 0;
}
Primero importaremos tres librerias, siendo la primera la estandar para manejar nuestro codigo. La segunda es para poder utilizar tipos string y la ultima para poder crear nuestro queue. Antes de ir al main definiremos una funcion para mostrar el contenido del queue. Para esta funcion implementaremos una plantilla, para poder manejar cualquier tipo en nuestro queue.
En el bloque mostraremos el resultado de llamar a las funciones front y back para ver ambos valores. En el main, primero creamos un objeto de tipo queue y almacenara valores de tipo string. Lo siguiente es agregar informacion mediante el uso de push, siendo estas varias marcas de coches al queue. Para finalmente llamar a la funcion que definimos anteriormente. Compilemos y veamos como es la salida:
$ ./stl
Frente: VW
Atras: AUDI
$
Como pueden ver nos mostro los valores que comentamos anteriorrmente. Esto es asi porque recuerden que siempre trabaja unicamente con los dos extremos. Volvamos al codigo anterior y modifiquemos el main de la siguiente manera:
int main()
{
std::queue<std::string> coches;
coches.push("VW");
coches.push("FORD");
coches.push("VOLVO");
coches.push("FIAT");
coches.push("AUDI");
mostrar(coches);
std::cout << "++++++++++++++" << std::endl;
coches.push("TOYOTA");
mostrar(coches);
return 0;
}
En este caso, agregamos una separacion simple de texto con respecto a la llamada a la funcion. Seguido por un nuevo valor que agregaremos mediante push. Y nuevamente llamar a la funcion. Compilemos y veamos como es la salida:
$ ./stl
Frente: VW
Atras: AUDI
++++++++++++++
Frente: VW
Atras: TOYOTA
$
Como pueden ver se establecio un nuevo valor en el extremo inferior comparado con el original. Para finalizar, volvemos a tomar el codigo anterior y modifiquemos el main de la siguiente manera:
int main()
{
std::queue<std::string> coches;
coches.push("VW");
coches.push("FORD");
coches.push("VOLVO");
coches.push("FIAT");
coches.push("AUDI");
mostrar(coches);
std::cout << "++++++++++++++" << std::endl;
coches.pop();
mostrar(coches);
return 0;
}
En este caso, solamente hicimos una pequeña modificacion. Y fue cambiar la linea donde agregabamos un nuevo valor por otra linea con un llamado a pop para quitar un valor. El resto sigue siendo igual al que vimos anteriormente. Compilemos y veamos como es la salida:
$ ./stl
Frente: VW
Atras: AUDI
++++++++++++++
Frente: FORD
Atras: AUDI
$
Nuevamente primero mostraremos como son los valores iniciales de cada extremo. Para luego ver como se elimino el valor que teniamos en el frente. Recuerden que trabaja como FIFO, por lo tanto al eliminar el dato, se ira el de frente y el que sigue tomara su lugar. Si bien queue no trabaja de la misma manera que stack podemos decir que coiniciden en algunos puntos. Como el hecho de que no pueden tomarse los datos mediante posiciones, asi como tambien necesitaremos funciones para hacerlo y podemos considerarlo como un contenedor asociativo en lugar de uno secuencial.
En resumen, hoy hemos visto queue, que es, para que sirve, como se utiliza, y un ejemplo practico con varias opciones para manipular la informacion. Espero les haya resultado de utilidad sigueme en tumblr, Twitter o Facebook para recibir una notificacion cada vez que subo un nuevo post en este blog, nos vemos en el proximo post.


Donatión
It’s for site maintenance, thanks!
$1.50
