Namespaces
Variants

std::deque<T,Allocator>:: deque

From cppreference.net
deque ( ) : deque ( Allocator ( ) ) { }
(1) (C++11부터)
(C++26부터 constexpr)
(2)
explicit deque ( const Allocator & alloc = Allocator ( ) ) ;
(C++11 이전)
explicit deque ( const Allocator & alloc ) ;
(C++11 이후)
(C++26 이후 constexpr)
explicit deque ( size_type count,
const Allocator & alloc = Allocator ( ) ) ;
(3) (C++11부터)
(C++26부터 constexpr)
(4)
explicit deque ( size_type count, const T & value = T ( ) ,
const Allocator & alloc = Allocator ( ) ) ;
(C++11 이전)
deque ( size_type count, const T & value,
const Allocator & alloc = Allocator ( ) ) ;
(C++11 이후)
(C++26 이후 constexpr)
template < class InputIt >

deque ( InputIt first, InputIt last,

const Allocator & alloc = Allocator ( ) ) ;
(5) (C++26부터 constexpr)
template < container-compatible-range < T > R >

deque ( std:: from_range_t , R && rg,

const Allocator & alloc = Allocator ( ) ) ;
(6) (C++23부터)
(C++26부터 constexpr)
deque ( const deque & other ) ;
(7) (C++26부터 constexpr)
deque ( deque && other ) ;
(8) (C++11부터)
(C++26부터 constexpr)
(9)
deque ( const deque & other, const Allocator & alloc ) ;
(C++11부터)
(C++23 이전까지)
deque ( const deque & other,
const std:: type_identity_t < Allocator > & alloc ) ;
(C++23부터)
(C++26부터 constexpr)
(10)
deque ( deque && other, const Allocator & alloc ) ;
(C++11부터)
(C++23까지)
deque ( deque && other, const std:: type_identity_t < Allocator > & alloc ) ;
(C++23부터)
(C++26부터 constexpr)
deque ( std:: initializer_list < T > init,
const Allocator & alloc = Allocator ( ) ) ;
(11) (C++11 이후)
(C++26 이후 constexpr)

다양한 데이터 소스로부터 새로운 deque 를 생성하며, 선택적으로 사용자가 제공한 할당자 alloc 를 사용합니다.

1) C++11부터 사용 가능한 기본 생성자입니다. 기본 생성된 할당자와 함께 빈 deque 를 생성합니다.
만약 Allocator DefaultConstructible 가 아닐 경우, 동작은 정의되지 않습니다.
2) C++11 이전의 기본 생성자. 주어진 할당자 alloc 를 사용하여 빈 deque 를 생성합니다.
3) deque count 개의 기본 생성된 T 객체로 생성합니다. 복사는 수행되지 않습니다.
만약 T DefaultInsertable 하지 않다면 deque 에 대해, 동작은 정의되지 않습니다.
4) deque count 개의 value 값으로 구성된 요소들로 생성합니다.

만약 T CopyInsertable 요구사항을 만족하지 않으면, 동작은 정의되지 않습니다.

(C++11부터)
5) 범위 [ first , last ) 의 내용으로 deque 를 생성합니다. [ first , last ) 내의 각 반복자는 정확히 한 번 역참조됩니다.

만약 InputIt LegacyInputIterator 요구사항을 만족하지 않으면, 대신 인자 static_cast < size_type > ( first ) , last alloc 를 사용한 (4) 번 오버로드가 호출됩니다.

(C++11 이전)

이 오버로드는 InputIt LegacyInputIterator 요구사항을 만족할 때만 오버로드 해결에 참여합니다.

만약 T * first 로부터 deque EmplaceConstructible 가 아니면, 동작은 정의되지 않습니다.

(C++11 이후)
6) 범위 rg 의 내용으로 deque 를 생성합니다. rg 내의 각 반복자는 정확히 한 번 역참조됩니다.
만약 T EmplaceConstructible 하지 않다면 deque * ranges:: begin ( rg ) 로부터의 생성이, 동작은 정의되지 않습니다.
7) 복사 생성자. deque other 의 내용으로 생성합니다.

할당자는 다음과 같이 얻습니다:
std:: allocator_traits < Allocator > :: select_on_container_copy_construction
( other. get_allocator ( ) )
.

(since C++11)
8) 이동 생성자. deque other 의 내용으로 생성합니다. 할당자는 other. get_allocator ( ) 에서 이동 생성으로 얻습니다.
9) 복사 생성자와 동일하지만, alloc 가 할당자로 사용된다는 점이 다릅니다.
만약 T CopyInsertable deque 에 대해 아닌 경우, 동작은 정의되지 않습니다.
10) 이동 생성자와 동일하지만, alloc 이 할당자로 사용된다는 점이 다릅니다.
만약 T MoveInsertable deque 에 대해 아닐 경우, 동작은 정의되지 않습니다.
11) 다음과 동일함: deque ( il. begin ( ) , il. end ( ) , alloc ) .

목차

매개변수

alloc - 이 컨테이너의 모든 메모리 할당에 사용할 할당자
count - 컨테이너의 크기
value - 컨테이너 요소를 초기화할 값
first, last - 복사할 요소들의 소스 범위 를 정의하는 반복자 쌍
other - 컨테이너 요소를 초기화하는 데 사용할 소스로 사용할 다른 컨테이너
init - 컨테이너 요소를 초기화할 초기화자 리스트
rg - 컨테이너 호환 범위

복잡도

1,2) 상수.
3,4) count 에 대해 선형적입니다.
5) 선형 시간 복잡도, std:: distance ( first, last ) .
6) 선형 시간 복잡도, ranges:: distance ( rg ) .
7) other. size ( ) 에 대해 선형적입니다.
8) 상수.
9) other. size ( ) 에 대해 선형 시간.
10) other. size ( ) 에 대해 선형 시간, alloc ! = other. get_allocator ( ) 인 경우, 그렇지 않으면 상수 시간.
11) 선형적으로 init. size ( ) .

예외

Allocator :: allocate 호출은 예외를 발생시킬 수 있습니다.

참고 사항

컨테이너 이동 생성 후 (오버로드 ( 8 ) ( 10 ) ), other 에 대한 참조, 포인터 및 반복자(끝 반복자 제외)는 유효하지만, 이제는 * this 에 있는 요소들을 참조합니다. 현재 표준은 [container.reqmts]/67 의 포괄적 명시를 통해 이 보장을 제공하며, LWG 이슈 2321 를 통해 더 직접적인 보장이 검토 중입니다.

기능 테스트 매크로 표준 기능
__cpp_lib_containers_ranges 202202L (C++23) 레인지 인식 생성 및 삽입; 오버로드 ( 6 )

예제

#include <deque>
#include <iostream>
#include <string>
template<typename T>
std::ostream& operator<<(std::ostream& s, const std::deque<T>& v)
{
    s.put('{');
    for (char comma[]{'\0', ' ', '\0'}; const auto& e : v)
        s << comma << e, comma[0] = ',';
    return s << "}\n";
}
int main()
{
    // C++11 초기화 리스트 구문:
    std::deque<std::string> words1{"the", "frogurt", "is", "also", "cursed"};
    std::cout << "1: " << words1;
    // words2 == words1
    std::deque<std::string> words2(words1.begin(), words1.end());
    std::cout << "2: " << words2;
    // words3 == words1
    std::deque<std::string> words3(words1);
    std::cout << "3: " << words3;
    // words4는 {"Mo", "Mo", "Mo", "Mo", "Mo"}
    std::deque<std::string> words4(5, "Mo");
    std::cout << "4: " << words4;
    const auto rg = {"cat", "cow", "crow"};
#ifdef __cpp_lib_containers_ranges
    std::deque<std::string> words5(std::from_range, rg); // 오버로드 (6)
#else
    std::deque<std::string> words5(rg.begin(), rg.end()); // 오버로드 (5)
#endif
    std::cout << "5: " << words5;
}

출력:

1: {the, frogurt, is, also, cursed}
2: {the, frogurt, is, also, cursed}
3: {the, frogurt, is, also, cursed}
4: {Mo, Mo, Mo, Mo, Mo}
5: {cat, cow, crow}

결함 보고서

다음의 동작 변경 결함 보고서들은 이전에 발표된 C++ 표준에 소급 적용되었습니다.

DR 적용 대상 게시된 동작 올바른 동작
LWG 144 C++98 오버로드 ( 5 ) 의 복잡도 요구사항이
해당 std::vector 오버로드와 동일했음
선형 복잡도로 변경됨
LWG 237 C++98 오버로드
( 5 ) 의 복잡도 요구사항이 first - last 에 선형이었음

std:: distance ( first, last ) 에 선형으로 변경됨
LWG 438 C++98 오버로드 ( 5 ) InputIt 가 정수형일 때만
오버로드 ( 4 ) 를 호출함
InputIt LegacyInputIterator 가 아닐 때
오버로드 ( 4 ) 를 호출함
LWG 2193 C++11 기본 생성자가 explicit였음 non-explicit로 변경됨
LWG 2210 C++11 오버로드 ( 3 ) 에 할당자 매개변수가 없었음 매개변수가 추가됨
N3346 C++11 오버로드 ( 3 ) 에서 컨테이너 내 요소들이
값 초기화되었음
기본 삽입됨

참고 항목

컨테이너에 값을 할당합니다
(public member function)
컨테이너에 값을 할당합니다
(public member function)