Clase stack
Clase de adaptador de contenedor de plantilla que proporciona una restricción de la funcionalidad que limita el acceso al elemento agregado más recientemente a algún tipo de contenedor subyacente. La clase stack
se usa cuando es importante tener claro que solo se están realizando operaciones stack
en el contenedor.
Sintaxis
template <class Type, class Container= deque <Type>>
class stack
Parámetros
Type
Tipo de datos de los elementos que se van a almacenar en la pila.
Container
Tipo del contenedor subyacente que se usa para implementar la pila. El valor predeterminado es la clase deque<Type>
.
Comentarios
Los elementos de la clase Type
estipulada en el primer parámetro de plantilla de un objeto de pila son sinónimos de value_type
y deben coincidir con el tipo de elemento de la clase de contenedor subyacente Container
estipulada por el segundo parámetro de plantilla. El Type
debe ser asignable, para que sea posible copiar objetos de ese tipo y asignar valores a variables de ese tipo.
Entre las clases contenedoras subyacentes adecuadas para la pila se incluyen deque
, list
(clase) y vector
(clase), o cualquier otro contenedor de secuencias que admita las operaciones back
, push_back
y pop_back
. La clase de contenedor subyacente se encapsula dentro del adaptador de contenedor, que solo expone el conjunto limitado de las funciones miembro de contenedor de secuencias como una interfaz pública.
Los objetos stack
solo se pueden someter a una comparación de igualdad si los elementos de la clase Type
se pueden someter a una comparación de igualdad. Además, solo se pueden someter a una comparación de tipo menor-que si los elementos de la clase Type
se pueden someter a una comparación de tipo menor-que.
La clase
stack
es compatible con una estructura de datos LIFO (el último en entrar es el primero en salir). Un buen símil sería una pila de platos. Solo se pueden insertar e inspeccionar elementos (platos) en la parte superior de la pila, que es el último elemento al final del contenedor base, y solo se pueden quitar de ahí. La restricción de acceder únicamente al elemento superior es el motivo por el que se usa la clasestack
.La clase
queue
es compatible con una estructura de datos FIFO (el primero en entrar es el primero en salir). Un buen símil sería el de personas que hacen cola en un banco. Se pueden agregar elementos (personas) a la parte posterior de la línea y quitarlos de la parte delantera de la línea. Se puede inspeccionar tanto la parte delantera como trasera de una línea. La restricción de acceder únicamente a los elementos delanteros y traseros de esta manera es el motivo por el que se usa la clasequeue
.La clase
priority_queue
ordena sus elementos de tal modo que el elemento más grande siempre esté en la parte superior. Admite la inserción de un elemento y la inspección y eliminación del elemento superior. Un buen símil sería el de personas alineadas y organizadas por edad, altura o cualquier otro criterio.
Miembros
Constructores
Nombre | Descripción |
---|---|
stack |
Construye una stack que está vacía o que es una copia de un objeto contenedor base. |
Typedefs
Nombre | Descripción |
---|---|
container_type |
Tipo que proporciona el contenedor base que debe adaptarse mediante una stack . |
size_type |
Tipo entero sin signo que puede representar el número de elementos de un stack . |
value_type |
Tipo que representa el tipo de objeto almacenado como elemento en una stack . |
Funciones
Nombre | Descripción |
---|---|
empty |
Comprueba si la stack está vacía. |
pop |
Quita el elemento de la parte superior de la stack . |
push |
Agrega un elemento a la parte superior de la stack . |
size |
Devuelve el número de elementos de stack . |
top |
Devuelve una referencia a un elemento en la parte superior de la stack . |
container_type
Un tipo que proporciona el contenedor base que debe adaptarse.
typedef Container container_type;
Comentarios
El tipo es un sinónimo del parámetro de plantilla Container
. Las tres clases de contenedor de secuencias de la biblioteca estándar de C++ (la clase vector
, la clase list
y la clase predeterminada deque
) cumplen los requisitos para usarse como el contenedor base para un objeto stack
. También pueden usarse tipos definidos por el usuario que cumplan estos requisitos.
Para obtener más información sobre Container
, vea la sección Comentarios del tema stack
(Clase).
Ejemplo
Vea el ejemplo de stack::stack
para obtener un ejemplo de cómo declarar y usar container_type
.
empty
Comprueba si una pila está vacía.
bool empty() const;
Valor devuelto
true
si la pila está vacía; false
si la pila no lo está.
Ejemplo
// stack_empty.cpp
// compile with: /EHsc
#include <stack>
#include <iostream>
int main( )
{
using namespace std;
// Declares stacks with default deque base container
stack <int> s1, s2;
s1.push( 1 );
if ( s1.empty( ) )
cout << "The stack s1 is empty." << endl;
else
cout << "The stack s1 is not empty." << endl;
if ( s2.empty( ) )
cout << "The stack s2 is empty." << endl;
else
cout << "The stack s2 is not empty." << endl;
}
The stack s1 is not empty.
The stack s2 is empty.
pop
Quita el elemento de la parte superior de la pila.
void pop();
Comentarios
La pila no debe estar vacía para aplicar la función miembro. La parte superior de la pila es la posición ocupada por el elemento agregado más recientemente y es el último elemento al final del contenedor.
Ejemplo
// stack_pop.cpp
// compile with: /EHsc
#include <stack>
#include <iostream>
int main( )
{
using namespace std;
stack <int> s1, s2;
s1.push( 10 );
s1.push( 20 );
s1.push( 30 );
stack <int>::size_type i;
i = s1.size( );
cout << "The stack length is " << i << "." << endl;
i = s1.top( );
cout << "The element at the top of the stack is "
<< i << "." << endl;
s1.pop( );
i = s1.size( );
cout << "After a pop, the stack length is "
<< i << "." << endl;
i = s1.top( );
cout << "After a pop, the element at the top of the stack is "
<< i << "." << endl;
}
The stack length is 3.
The element at the top of the stack is 30.
After a pop, the stack length is 2.
After a pop, the element at the top of the stack is 20.
push
Agrega un elemento a la parte superior de la pila.
void push(const Type& val);
Parámetros
val
El elemento agregado a la parte superior de la pila.
Comentarios
La parte superior de la pila es la posición ocupada por el elemento agregado más recientemente y es el último elemento al final del contenedor.
Ejemplo
// stack_push.cpp
// compile with: /EHsc
#include <stack>
#include <iostream>
int main( )
{
using namespace std;
stack <int> s1;
s1.push( 10 );
s1.push( 20 );
s1.push( 30 );
stack <int>::size_type i;
i = s1.size( );
cout << "The stack length is " << i << "." << endl;
i = s1.top( );
cout << "The element at the top of the stack is "
<< i << "." << endl;
}
The stack length is 3.
The element at the top of the stack is 30.
size
Devuelve el número de elementos de la pila.
size_type size() const;
Valor devuelto
La longitud actual de la pila.
Ejemplo
// stack_size.cpp
// compile with: /EHsc
#include <stack>
#include <iostream>
int main( )
{
using namespace std;
stack <int> s1, s2;
stack <int>::size_type i;
s1.push( 1 );
i = s1.size( );
cout << "The stack length is " << i << "." << endl;
s1.push( 2 );
i = s1.size( );
cout << "The stack length is now " << i << "." << endl;
}
The stack length is 1.
The stack length is now 2.
size_type
Un tipo entero sin signo que puede representar el número de elementos de una pila.
typedef typename Container::size_type size_type;
Comentarios
El tipo es un sinónimo de size_type
del contenedor base adaptado por la pila.
Ejemplo
Vea el ejemplo de size
para obtener un ejemplo de cómo declarar y usar size_type
.
stack
Construye una pila que está vacía o que es una copia de una clase contenedora base.
stack();
explicit stack(const container_type& right);
Parámetros
right
El contenedor del que la pila construida va a ser una copia.
Ejemplo
// stack_stack.cpp
// compile with: /EHsc
#include <stack>
#include <vector>
#include <list>
#include <iostream>
int main( )
{
using namespace std;
// Declares stack with default deque base container
stack <char> dsc1;
//Explicitly declares a stack with deque base container
stack <char, deque<char> > dsc2;
// Declares a stack with vector base containers
stack <int, vector<int> > vsi1;
// Declares a stack with list base container
stack <int, list<int> > lsi;
// The second member function copies elements from a container
vector<int> v1;
v1.push_back( 1 );
stack <int, vector<int> > vsi2( v1 );
cout << "The element at the top of stack vsi2 is "
<< vsi2.top( ) << "." << endl;
}
The element at the top of stack vsi2 is 1.
top
Devuelve una referencia a un elemento en la parte superior de la pila.
reference top();
const_reference top() const;
Valor devuelto
Una referencia al último elemento del contenedor en la parte superior de la pila.
Comentarios
La pila no debe estar vacía para aplicar la función miembro. La parte superior de la pila es la posición ocupada por el elemento agregado más recientemente y es el último elemento al final del contenedor.
Si el valor devuelto de top
se asigna a un const_reference
, el objeto stack
no puede modificarse. Si el valor devuelto de top
se asigna a un reference
, stack
sí se puede modificar.
Ejemplo
// stack_top.cpp
// compile with: /EHsc
#include <stack>
#include <iostream>
int main( )
{
using namespace std;
stack <int> s1;
s1.push( 1 );
s1.push( 2 );
int& i = s1.top( );
const int& ii = s1.top( );
cout << "The top integer of the stack s1 is "
<< i << "." << endl;
i--;
cout << "The next integer down is "<< ii << "." << endl;
}
The top integer of the stack s1 is 2.
The next integer down is 1.
value_type
Un tipo que representa el tipo de objeto almacenado como elemento en una pila.
typedef typename Container::value_type value_type;
Comentarios
El tipo es un sinónimo de value_type
del contenedor base adaptado por la pila.
Ejemplo
// stack_value_type.cpp
// compile with: /EHsc
#include <stack>
#include <iostream>
int main( )
{
using namespace std;
// Declares stacks with default deque base container
stack<int>::value_type AnInt;
AnInt = 69;
cout << "The value_type is AnInt = " << AnInt << endl;
stack<int> s1;
s1.push( AnInt );
cout << "The element at the top of the stack is "
<< s1.top( ) << "." << endl;
}
The value_type is AnInt = 69
The element at the top of the stack is 69.
Vea también
Seguridad para subprocesos en la biblioteca estándar de C++
Referencia de biblioteca estándar de C++