[C con Clase] Buenos días, en relación a stack y queue

Davidson, Steven srd4121 en njit.edu
Jue Feb 6 19:21:39 CET 2014


Hola Miguel Ángel,

2014-02-06 7:06 GMT-05:00 Miguel Ángel Torres Fernández-Píñar <
miguelangeltorresfp en gmail.com>:

> Hola, buenos días a todos.
>
> Hay alguna forma de recorrer los elementos de una pila o de una cola
> usando las clases stack y queue ???
>
> Creo que con estas clases no funcionan los iteradores, no ???
>
> Por ejemplo, declarando la siguiente pila :
>
> stack<int> mi_pila;
>
>
Por lo que he investigado, no se puede acceder a todos los elementos de
forma fácil. Es posible que tengas que crear tu propio adjudicador
(allocator, en inglés) para que la pila (o cola) comparta la misma memoria
con otro contenedor, como por ejemplo, 'vector', 'list', o 'deque', con el
que puedes recorrer los elementos adjudicados.

De todas maneras, creo que la mejor opción es usar otro contenedor, pero
con algunas funciones miembro para que aparente tener la funcionalidad de
una pila (o cola). Al fin y al cabo, estos dos contenedores - 'stack' y
'queue' - invocan ciertas funciones miembro de los contenedores en que se
basan, que por defecto es 'deque'. Esto es,

mi_pila.push( ... )  =>  mi_pila.contenedor.push_back()
mi_pila.pop( ... )    =>  mi_pila.contenedor.pop_back()
mi_pila.top( ... )    =>  mi_pila.contenedor.back()

Por lo tanto, usa 'deque' pero usa solamente sus funciones miembro:
'push_back()', 'pop_back()', y 'back()', para recrear el comportamiento de
una pila.

Pero si de verdad quieres usar la clase-plantilla, 'stack', podrías derivar
de ella para tener acceso al contenedor miembro. En tu clase derivada,
puedes ofrecer una función miembro para acceder a tal contenedor interno.
Por ejemplo,

class MiPilaInt : public stack<int>
{
  ...

public:
  stack<int> :: container_type & contenedor()  {...};
  const stack<int> :: container_type & contenedor() const  {...};
};

Todo funcionaría como 'stack<int>', pero con la funcionalidad agregada de
tener acceso al contenedor.


Espero que todo esto te sirva.

Steven
------------ próxima parte ------------
Se ha borrado un adjunto en formato HTML...
URL: <http://listas.conclase.net/pipermail/cconclase_listas.conclase.net/attachments/20140206/6abea129/attachment.html>


Más información sobre la lista de distribución Cconclase