std:: array
|
헤더 파일에 정의됨
<array>
|
||
|
template
<
class
T,
|
(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
|
|
||||||
const_iterator
|
|
||||||
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
의 값을 사전식으로 비교
(함수 템플릿) |
|
(C++11)
|
array
의 요소에 접근
(함수 템플릿) |
|
(C++11)
|
std::swap
알고리즘을 특수화
(함수 템플릿) |
|
(C++20)
|
내장 배열로부터
std::array
객체를 생성
(함수 템플릿) |
헬퍼 클래스
|
(C++11)
|
array
의 크기를 구함
(클래스 템플릿 특수화) |
|
(C++11)
|
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 Ǝ
참고 항목
|
(C++26)
|
크기 조정 가능, 고정 용량, 인플레이스 연속 배열
(클래스 템플릿) |
|
크기 조정 가능한 연속 배열
(클래스 템플릿) |
|
|
양방향 큐
(클래스 템플릿) |
|
|
(library fundamentals TS v2)
|
크기와 선택적으로 요소 타입이 인수에서 추론되는
std::array
객체를 생성함
(함수 템플릿) |