나만의 작은 도서관
[C++][STL Container] 시퀀스 컨테이너 #4. 배열(Array) 본문
시퀀스 컨테이너란?
- 시퀀스 컨테이너(Sequence Container)는 C++에서 제공하는 STL 컨테이너 종류(시퀀스 컨테이너, 연관 컨테이너, 컨테이너 어뎁터) 중 하나로, 원소들을 순차적으로 저장하는 컨테이너이다.
시퀀스 컨테이너의 종류
- 벡터(vector)
- 리스트(list, forward_list)
- 데크(deque)
- 배열(array) - [현재 글]
배열(Array)이란?

- array는 C++ 스타일의 정적 배열로, 내부적으로 정적 배열(T[N])을 감싸고 있는 형태이다.
- array는 STL Container이므로, 기존의 C 배열과 같은 형태를 유지하면서(오버헤드 없음), C++에 추가된 반복자나 대입 연산자 등을 사용할 수 있다.
- 정적 배열이므로 원소 삽입 / 삭제가 불가하며, 오로지 접근만 가능하다.
- "임의의 위치"에 대한 데이터 접근이 빠르다. (시간복잡도 O(1))
배열 멤버 함수
원소 접근 관련(Element access)
at() | i번째 원소에 접근 (범위 검사 O) |
operator [] | i번째 원소에 접근 (범위 검사 X) |
front() | 첫번째 원소에 접근 |
back() | 마지막 원소에 접근 |
data() | array의 시작 주소를 반환 ( &arr[0]과 동일 ) |
크기 관련(Capacity)
empty() | array의 size가 0인지 확인한다(bool 타입 반환) |
size() | array의 크기(원소의 개수) |
max_size() | 가능한 최대 size 반환. |
더 자세한 내용은 아래 링크 참조
https://en.cppreference.com/w/cpp/container/array
std::array - cppreference.com
template< class T, std::size_t N > struct array; (since C++11) std::array is a container that encapsulates fixed size arrays. This container is an aggregate type with the same semantics as a struct holding a C-style array T[N] as its only non-s
en.cppreference.com
알아두어야 할 점
- C 배열과 다르게 배열의 이름이 T*로 자동 형변환 되지 않는다.
- 크기가 0인 경우, begin() == end()이다. (다른 컨테이너들은 크기가 0이면 end()가 begin() 뒤에 있다)
- 크기가 0인 경우, front()나 back() 호출의 결과는 정의되지 않은 행동(undefined behavior)이다.
반복자 무효화
- array는 크기가 변하지 않기 때문에 array 객체가 살아있는 동안 반복자는 절대로 무효화되지 않는다. 다만, swap후에도 기존의 반복자가 같은 위치를 계속 가리키고 있다면 반복자가 다른 값을 가리킬 수도 있다.
vector의 경우
vector<int> vec = {1, 2, 3};
auto it = vec.begin(); // 반복자 저장
vec.push_back(4); // capacity 초과 시 내부 배열이 새로운 메모리로 이동
cout << *it << '\n'; // ⚠️ Undefined Behavior (유효하지 않은 반복자)
array의 경우
array<int, 3> arr1 = {1, 2, 3};
array<int, 3> arr2 = {4, 5, 6};
auto it = arr1.begin(); // 반복자 저장
std::cout << *it << '\n'; // 1 (배열 객체가 살아있는동안 반드시 유효)
swap(arr1, arr2);
std::cout << *it << '\n'; // 4 (배열 객체가 살아있는동안 반드시 유효)
각 시퀀스 컨테이너 사용 정리
- vector : 대부분의 상황에서 사용
- list : 데이터 접근 횟수가 적고, 중간 위치에 삽입 / 삭제 작업이 많아 vector에서 발생하는 복사 비용이 부담스러운 경우
- deque : vector를 사용하고 싶지만, 맨 앞에 삽입 / 삭제하는 작업이 많은 경우
- array : C의 정적 배열을 반복자나 대입 연산자를 지원하는 방식으로 사용하고 싶은 경우
참고 자료
'C++ > 문법 및 메소드(STL)' 카테고리의 다른 글
[C++][STL Container] 컨테이너 어뎁터 (0) | 2025.03.18 |
---|---|
[C++][STL Container] 연관 컨테이너 (set/map, multiset/multimap, unordered_set/unordered_map) (0) | 2025.03.17 |
[C++][STL Container] 시퀀스 컨테이너 #3. 데크(deque) (0) | 2025.03.15 |
[C++][STL Container] 시퀀스 컨테이너 #2. 리스트(List) (0) | 2025.03.15 |
[C++][STL Container] 시퀀스 컨테이너 #1. 벡터(vector) (0) | 2025.03.15 |