Namespaces
Variants

deduction guides for std::stack

From cppreference.net

Definido en el encabezado <stack>
template < class Container >

stack ( Container )

- > stack < typename Container :: value_type , Container > ;
(1) (desde C++17)
template < class Container, class Alloc >

stack ( Container, Alloc )

- > stack < typename Container :: value_type , Container > ;
(2) (desde C++17)
template < class InputIt >

stack ( InputIt, InputIt )

- > stack < typename std:: iterator_traits < InputIt > :: value_type > ;
(3) (desde C++23)
template < class InputIt, class Alloc >

stack ( InputIt, InputIt, Alloc )
- > stack < typename std:: iterator_traits < InputIt > :: value_type ,

std:: deque < typename std:: iterator_traits < InputIt > :: value_type , Alloc >> ;
(4) (desde C++23)
template < ranges:: input_range R >

stack ( std:: from_range_t , R && )

- > stack < ranges:: range_value_t < R >> ;
(5) (desde C++23)
template < ranges:: input_range R, class Allocator >

stack ( std:: from_range_t , R && , Allocator )
- > stack < ranges:: range_value_t < R > ,

std:: deque < ranges:: range_value_t < R > , Allocator >> ;
(6) (desde C++23)

Estas guías de deducción se proporcionan para stack para permitir la deducción a partir del tipo de contenedor subyacente.

1) Deduce el tipo de contenedor subyacente a partir del argumento.
2) Igual que (1) , excepto que se proporciona el allocator.
3) Deduce el tipo de elemento del iterador, usando std:: deque < typename std:: iterator_traits < InputIt > :: value_type > como el tipo de contenedor subyacente.
4) Igual que (3) , excepto que el asignador está proporcionado.
5) Deduce el tipo de elemento a partir de una etiqueta std::from_range_t y un input_range .
6) Igual que (5) , excepto que el asignador está proporcionado.

Estas sobrecargas participan en la resolución de sobrecarga solo si

Nota: el grado en que la biblioteca determina que un tipo no satisface LegacyInputIterator no está especificado, excepto que como mínimo los tipos integrales no califican como iteradores de entrada. Del mismo modo, el grado en que determina que un tipo no satisface Allocator no está especificado, excepto que como mínimo el tipo miembro Alloc::value_type debe existir y la expresión std:: declval < Alloc & > ( ) . allocate ( std:: size_t { } ) debe estar bien formada cuando se trata como un operando no evaluado.

Notas

Macro de prueba de características Valor Std Característica
__cpp_lib_adaptor_iterator_pair_constructor 202106L (C++23) Constructores de par de iteradores para std::queue y std::stack ; sobrecargas (2) y (4)
__cpp_lib_containers_ranges 202202L (C++23) Construcción e inserción conscientes de rangos; sobrecargas (5) y (6)

Ejemplo

#include <stack>
#include <vector>
int main()
{
    std::vector<int> v = {1, 2, 3, 4};
    std::stack s{v}; // guide #1 deduces std::stack<int, vector<int>>
}