Spec-Zone.ru › C++

Руководства по выводу типов для std::stack

Определено в заголовке <stack>
template< class Container >
stack( Container )
    -> stack<typename Container::value_type, Container>;
(1) (с C++17)
template< class Container, class Alloc >
stack( Container, Alloc )
    -> stack<typename Container::value_type, Container>;
(2) (с C++17)
template< class InputIt >
stack( InputIt, InputIt )
    -> stack<typename std::iterator_traits<InputIt>::value_type>;
(3) (с 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) (с C++23)
template< ranges::input_range R >
stack( std::from_range_t, R&& )
    -> stack<ranges::range_value_t<R>>;
(5) (с 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) (с C++23)

Эти руководства по выводу типов предоставляются для stack, чтобы разрешить вывод из базового типа контейнера.

1) Выводит базовый тип контейнера из аргумента.
2) То же, что (1), за исключением того, что указатель на аллокатор предоставлен.
3) Выводит тип элемента из итератора, используя std::deque<typename std::iterator_traits<InputIt>::value_type> в качестве базового типа контейнера.
4) То же, что (3), за исключением того, что указатель на аллокатор предоставлен.
5) Выводит тип элемента из тега std::from_range_t и input_range.
6) То же, что (5), за исключением того, что указатель на аллокатор предоставлен.

Эти перегрузки участвуют в разрешении перегрузки только в том случае, если

  • InputIt (если существует) удовлетворяет LegacyInputIterator,
  • Container (если существует) не удовлетворяет Allocator,
  • для (3)(до C++23)(4)(с C++23), Alloc удовлетворяет Allocator, и
  • std::uses_allocator_v<Container, Alloc> равно true если оба Container и Alloc существуют.

Примечание: степень, в которой библиотека определяет, что тип не удовлетворяет LegacyInputIterator, не определена, за исключением того, что целочисленные типы минимально не квалифицируются как входные итераторы. Аналогично, степень, в которой она определяет, что тип не удовлетворяет Allocator, не определена, за исключением того, что членский тип Alloc::value_type должен существовать, и выражение std::declval<Alloc&>().allocate(std::size_t{}) должно быть корректным, когда рассматривается как неоцениваемый операнд.

Примечания

Макрокоманда проверки функций Значение Std Функция
__cpp_lib_adaptor_iterator_pair_constructor 202106L (C++23) Конструкторы пар итераторов для std::queue и std::stack; перегрузки (2) и (4)
__cpp_lib_containers_ranges 202202L (C++23) Отображение совместимых со контейнерами конструкция и вставка; перегрузки (5) и (6)

Пример

#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>>
}

© cppreference.com
Licensed under the Creative Commons Attribution-ShareAlike Unported License v3.0.
https://en.cppreference.com/w/cpp/container/stack/deduction_guides

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API