Namespaces
Variants

std:: stack

From cppreference.net
Definido en el encabezado <stack>
template <

class T,
class Container = std:: deque < T >

> class stack ;

La clase std::stack es un adaptador de contenedor que proporciona al programador la funcionalidad de una pila - específicamente, una estructura de datos LIFO (último en entrar, primero en salir).

La plantilla de clase actúa como un contenedor para el contenedor subyacente - solo se proporciona un conjunto específico de funciones. El stack empuja y extrae el elemento desde el final del contenedor subyacente, conocido como el top del stack.

Todas las funciones miembro de std::stack son constexpr : es posible crear y utilizar objetos std::stack en la evaluación de una expresión constante.

Sin embargo, los objetos std::stack generalmente no pueden ser constexpr , porque cualquier almacenamiento asignado dinámicamente debe liberarse en la misma evaluación de la expresión constante.

(desde C++26)

Contenidos

Parámetros de plantilla

T - El tipo de los elementos almacenados. El programa está mal formado si T no es del mismo tipo que Container::value_type .
Container - El tipo del contenedor subyacente utilizado para almacenar los elementos. El contenedor debe satisfacer los requisitos de SequenceContainer . Adicionalmente, debe proporcionar las siguientes funciones con la semántica usual :

Los contenedores estándar std::vector (incluyendo std::vector<bool> ), std::deque y std::list satisfacen estos requisitos. Por defecto, si no se especifica una clase contenedora para una instanciación de clase stack particular, se utiliza el contenedor estándar std::deque .

Tipos de miembros

Tipo Definición
container_type Container
value_type Container::value_type
size_type Container :: size_type
reference Container::reference
const_reference Container::const_reference

Objetos miembro

Miembro Descripción
Container c
el contenedor subyacente
(objeto miembro protegido)

Funciones miembro

construye el stack
(función miembro pública)
destruye el stack
(función miembro pública)
asigna valores al adaptador de contenedor
(función miembro pública)
Acceso a elementos
accede al elemento superior
(función miembro pública)
Capacidad
comprueba si el adaptador de contenedor está vacío
(función miembro pública)
devuelve el número de elementos
(función miembro pública)
Modificadores
inserta elemento en la parte superior
(función miembro pública)
(C++23)
inserta un rango de elementos en la parte superior
(función miembro pública)
(C++11)
construye elemento in situ en la parte superior
(función miembro pública)
elimina el elemento superior
(función miembro pública)
(C++11)
intercambia los contenidos
(función miembro pública)

Funciones no miembro

compara lexicográficamente los valores de dos stack s
(plantilla de función)
especializa el algoritmo std::swap
(plantilla de función)

Clases auxiliares

especializa el rasgo de tipo std::uses_allocator
(especialización de plantilla de clase)
soporte de formato para std::stack
(especialización de plantilla de clase)

Guías de deducción

(desde C++17)

Notas

Macro de prueba de características Valor Estándar Característica
__cpp_lib_containers_ranges 202202L (C++23) Construcción e inserción de rangos para contenedores
__cpp_lib_constexpr_stack 202502L (C++26) constexpr std::stack

Ejemplo

Informes de defectos

Los siguientes informes de defectos que modifican el comportamiento se aplicaron retroactivamente a los estándares de C++ publicados anteriormente.

DR Aplicado a Comportamiento publicado Comportamiento correcto
LWG 307 C++98 Container no podía ser std::vector<bool> permitido
LWG 2566 C++98 Faltaba el requisito para Container::value_type mal formado si T no es del mismo tipo que Container::value_type

Véase también

matriz contigua redimensionable
(class template)
bitset dinámico eficiente en espacio
(class template specialization)
cola de doble extremo
(class template)
lista doblemente enlazada
(class template)