array
C++에서 std::array는 **STL(Standard Template Library)**에서 제공하는 컨테이너 중 하나로, 고정 크기의 배열을 다루기 위한 템플릿 기반 컨테이너입니다. 기존의 C 스타일 배열보다 안전성과 유용한 메서드를 제공하며, 컴파일 타임에 크기가 고정됩니다.
1. std::array의 특징
- 정적 크기:
- 배열 크기는 컴파일 타임에 결정되며, 런타임에는 변경할 수 없습니다.
- 안전성:
- 경계 검사 함수(at())를 제공하여 배열 인덱스 초과 오류를 방지.
- 연속된 메모리:
- 내부적으로 기존 C 스타일 배열처럼 연속된 메모리를 사용.
- 포인터를 활용한 작업이 가능하며 다른 표준 라이브러리와 잘 통합됩니다.
- 성능:
- C 스타일 배열과 거의 동일한 성능을 제공합니다.
- 추가 기능:
- STL 컨테이너로서 크기, 정렬, 반복자(iterator) 등 다양한 기능을 제공합니다.
2. 헤더 파일
std::array를 사용하려면 <array> 헤더 파일을 포함해야 합니다.
3. 선언 및 초기화
4. 주요 멤버 함수
접근 관련
at(index) | 배열의 index 위치 값을 반환하며, 경계를 초과하면 예외 발생. |
operator[] | 배열의 index 위치 값을 반환하며, 경계 검사를 하지 않음. |
front() | 배열의 첫 번째 요소를 반환. |
back() | 배열의 마지막 요소를 반환. |
data() | 배열의 첫 번째 요소에 대한 포인터를 반환 (C 스타일 배열처럼 사용 가능). |
크기 관련
size() | 배열의 크기를 반환. |
max_size() | 배열의 최대 크기를 반환 (고정 크기라 size()와 동일). |
empty() | 배열이 비어 있는지 여부를 반환 (false만 반환됨). |
조작 관련
fill(val) | 배열의 모든 요소를 val로 초기화. |
swap(other) | 다른 배열과 요소를 교환. |
사용 예시
#include <iostream>
#include <array>
int main() {
// 1. at(index)
std::array<int, 5> arr = {1, 2, 3, 4, 5};
std::cout << "at(2): " << arr.at(2) << std::endl; // index 2의 값 반환
// 2. operator[]
std::cout << "operator[]: " << arr[2] << std::endl; // index 2의 값 반환
// 3. front()
std::cout << "front(): " << arr.front() << std::endl; // 첫 번째 요소 반환
// 4. back()
std::cout << "back(): " << arr.back() << std::endl; // 마지막 요소 반환
// 5. data()
int* ptr = arr.data(); // 배열의 첫 번째 요소의 포인터 반환
std::cout << "data(): " << *ptr << std::endl; // 첫 번째 요소 값 출력
// 6. size()
std::cout << "size(): " << arr.size() << std::endl; // 배열 크기 출력
// 7. max_size()
std::cout << "max_size(): " << arr.max_size() << std::endl; // 배열 최대 크기 출력
// 8. empty()
std::cout << "empty(): " << std::boolalpha << arr.empty() << std::endl; // 배열이 비었는지 확인 (항상 false)
// 9. fill(val)
arr.fill(10); // 모든 요소를 10으로 초기화
std::cout << "After fill(10): ";
for (const auto& elem : arr) {
std::cout << elem << " ";
}
std::cout << std::endl;
// 10. swap(other)
std::array<int, 5> other = {6, 7, 8, 9, 10};
arr.swap(other); // arr와 other의 요소 교환
std::cout << "After swap: arr = ";
for (const auto& elem : arr) {
std::cout << elem << " ";
}
std::cout << "\nother = ";
for (const auto& elem : other) {
std::cout << elem << " ";
}
std::cout << std::endl;
return 0;
}
결과
at(2): 3
operator[]: 3
front(): 1
back(): 5
data(): 1
size(): 5
max_size(): 5
empty(): false
After fill(10): 10 10 10 10 10
After swap: arr = 6 7 8 9 10
other = 10 10 10 10 10
'C++ > STL 컨테이너' 카테고리의 다른 글
STL 컨테이너 - queue (0) | 2025.01.07 |
---|---|
STL 컨테이너 - stack (0) | 2025.01.07 |
STL 컨테이너 - list (0) | 2025.01.07 |
STL 컨테이너 - vector (0) | 2025.01.07 |
STL 컨테이너 - map (0) | 2024.11.25 |