Spec-Zone.ru › C++

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

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

Эти руководства по выводу типов предоставляются для queue для возможности вывода типа из базового типа контейнера.

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 <queue>
#include <vector>
 
int main()
{
    std::vector<int> v = {1, 2, 3, 4};
    std::queue s{v}; // guide #1 deduces std::queue<int, vector<int>>
}

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

Spec-Zone.ru

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