Namespaces
Variants

std:: array

From cppreference.net
헤더 파일에 정의됨 <array>
template <

class T,
std:: size_t N

> struct array ;
(C++11부터)

std::array 는 고정 크기 배열을 캡슐화하는 컨테이너입니다.

이 컨테이너는 C-style 배열 T [ N ] 을 유일한 비정적 데이터 멤버로 보유하는 구조체와 동일한 의미론을 가진 집합체(aggregate) 타입입니다. C-style 배열과 달리 T * 로 자동으로 붕괴(decay)되지 않습니다. 집합체 타입으로서 집합체 초기화(aggregate-initialization) 를 통해 최대 N 개의 T 로 변환 가능한 초기화자를 사용하여 초기화할 수 있습니다: std :: array < int , 3 > a = { 1 , 2 , 3 } ; .

이 구조체는 C 스타일 배열의 성능과 접근성을 표준 컨테이너의 이점과 결합합니다. 이는 자신의 크기를 알고, 할당을 지원하며, 임의 접근 반복자 등을 포함합니다.

std::array Container ReversibleContainer 요구 사항을 만족하지만, 기본 생성된 array는 비어 있지 않으며 스왑의 복잡도가 선형이라는 점이 예외입니다. 또한 ContiguousContainer 요구 사항을 만족하며, (C++17부터) SequenceContainer 요구 사항을 부분적으로 만족합니다.

길이가 0인 배열에 대한 특별한 경우가 있습니다 ( N == 0 ). 이 경우, array. begin ( ) == array. end ( ) 가 성립하며, 이는 어떤 고유한 값입니다. 크기가 0인 배열에서 front ( ) 또는 back ( ) 를 호출하는 효과는 정의되지 않습니다.

배열은 동일한 타입의 N 개 요소로 구성된 튜플로도 사용할 수 있습니다.

목차

반복자 무효화

일반적으로 배열에 대한 반복자는 배열의 수명 동안 무효화되지 않습니다. 그러나 주의할 점은 swap 동안 반복자가 동일한 배열 요소를 계속 가리키므로 그 값이 변경된다는 것입니다.

템플릿 매개변수

T - 요소 타입은 반드시 MoveConstructible 이고 MoveAssignable 이어야 합니다.
N - 배열의 요소 개수 또는 0 입니다.

멤버 타입

멤버 타입 정의
value_type T
size_type std::size_t
difference_type std::ptrdiff_t
reference value_type &
const_reference const value_type &
pointer value_type *
const_pointer const value_type *
iterator

LegacyRandomAccessIterator LegacyContiguousIterator (지정: value_type )

(C++17 이전)

LegacyRandomAccessIterator LegacyContiguousIterator 이며 LiteralType 인 타입 (지정: value_type )

(C++17 이후)
(C++20 이전)

LegacyRandomAccessIterator , contiguous_iterator , 및 ConstexprIterator (지정: value_type )

(C++20 이후)
const_iterator

LegacyRandomAccessIterator LegacyContiguousIterator (지정: const value_type )

(C++17 이전)

LegacyRandomAccessIterator LegacyContiguousIterator 이며 LiteralType 인 타입 (지정: const value_type )

(C++17 이후)
(C++20 이전)

LegacyRandomAccessIterator , contiguous_iterator , 및 ConstexprIterator (지정: const value_type )

(C++20 이후)
reverse_iterator std:: reverse_iterator < iterator >
const_reverse_iterator std:: reverse_iterator < const_iterator >

멤버 함수

암시적으로 정의된 멤버 함수
(constructor)
(implicitly declared)
배열을 집합체 초기화 규칙에 따라 초기화함 (기본 초기화는 비클래스 T 에 대해 불확정 값을 초래할 수 있음)
(public member function)
(destructor)
(implicitly declared)
배열의 모든 요소를 파괴함
(public member function)
operator=
(implicitly declared)
배열의 모든 요소를 다른 배열의 해당 요소로 덮어씀
(public member function)
요소 접근
범위 검사와 함께 지정된 요소에 접근
(public member function)
지정된 요소에 접근
(public member function)
첫 번째 요소에 접근
(public member function)
마지막 요소에 접근
(public member function)
기반 연속 저장소에 직접 접근
(public member function)
반복자
시작을 가리키는 반복자를 반환
(public member function)
끝을 가리키는 반복자를 반환
(public member function)
시작을 가리키는 역방향 반복자를 반환
(public member function)
끝을 가리키는 역방향 반복자를 반환
(public member function)
용량
컨테이너가 비어 있는지 여부를 확인
(public member function)
요소의 개수를 반환
(public member function)
가능한 최대 요소 개수를 반환
(public member function)
연산
컨테이너를 지정된 값으로 채움
(public member function)
내용을 교환
(public member function)

비멤버 함수

(C++11) (C++11) (C++20에서 제거됨) (C++11) (C++20에서 제거됨) (C++11) (C++20에서 제거됨) (C++11) (C++20에서 제거됨) (C++11) (C++20에서 제거됨) (C++20)
array 의 값을 사전식으로 비교
(함수 템플릿)
array 의 요소에 접근
(함수 템플릿)
std::swap 알고리즘을 특수화
(함수 템플릿)
(C++20)
내장 배열로부터 std::array 객체를 생성
(함수 템플릿)

헬퍼 클래스

array 의 크기를 구함
(클래스 템플릿 특수화)
array 요소의 타입을 구함
(클래스 템플릿 특수화)

추론 가이드

(C++17부터)

예제

#include <algorithm>
#include <array>
#include <iostream>
#include <iterator>
#include <string>
int main()
{
    // 생성에는 집계 초기화 사용
    std::array<int, 3> a1{{1, 2, 3}}; // C++11에서 CWG 1270 개정 전에는 이중 중괄호 필요
                                      // (개정 이후 C++11 및 C++14 이상에서는 필요 없음)
    std::array<int, 3> a2 = {1, 2, 3}; // = 이후에는 이중 중괄호가 절대 필요하지 않음
    // 컨테이너 연산 지원
    std::sort(a1.begin(), a1.end());
    std::ranges::reverse_copy(a2, std::ostream_iterator<int>(std::cout, " "));
    std::cout << '\n';
    // 범위 기반 for 루프 지원
    std::array<std::string, 2> a3{"E", "\u018E"};
    for (const auto& s : a3)
        std::cout << s << ' ';
    std::cout << '\n';
    // 배열 생성을 위한 추론 가이드 (C++17부터)
    [[maybe_unused]] std::array a4{3.0, 1.0, 4.0}; // std::array<double, 3>
    // 지정되지 않은 요소의 동작은 기본 제공 배열과 동일
    [[maybe_unused]] std::array<int, 2> a5; // 목록 초기화 없음, a5[0]과 a5[1]은
                                            // 기본 초기화됨
    [[maybe_unused]] std::array<int, 2> a6{}; // 목록 초기화, 두 요소 모두 값 초기화됨
                                              // a6[0] = a6[1] = 0
    [[maybe_unused]] std::array<int, 2> a7{1}; // 목록 초기화, 지정되지 않은 요소는 값 초기화됨
                                               // a7[0] = 1, a7[1] = 0
}

출력:

3 2 1
E Ǝ

참고 항목

크기 조정 가능, 고정 용량, 인플레이스 연속 배열
(클래스 템플릿)
크기 조정 가능한 연속 배열
(클래스 템플릿)
양방향 큐
(클래스 템플릿)
(library fundamentals TS v2)
크기와 선택적으로 요소 타입이 인수에서 추론되는 std::array 객체를 생성함
(함수 템플릿)