Namespaces
Variants

deduction guides for std::queue

From cppreference.net

헤더에 정의됨 <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부터)

이러한 deduction guides 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) (until C++23) (4) (since 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 { } ) 가 평가되지 않은 피연산자로 취급될 때 형식이 올바르게 구성되어야 합니다.

참고 사항

Feature-test 매크로 표준 기능
__cpp_lib_adaptor_iterator_pair_constructor 202106L (C++23) std::queue std::stack 에 대한 반복자 쌍 생성자; (2) (4) 오버로드
__cpp_lib_containers_ranges 202202L (C++23) Ranges-aware 생성 및 삽입; (5) (6) 오버로드

예제

#include <queue>
#include <vector>
int main()
{
    std::vector<int> v = {1, 2, 3, 4};
    std::queue s{v}; // 가이드 #1은 std::queue<int, vector<int>>를 추론함
}