
: 원소의 타입과 배열 크기를 매개변수로 사용하는 클래스 템플릿
: C 스타일 배열에 대한 래퍼 클래스
: 메모리를 자동으로 할당하고 해제함
: 크기가 10인 int 타입의 std::array 배열을 선언한 후, 원소 값을 설정하거나 화면에 출력 하는 예제 코드
std::array<int, 10> arr; //크기가 10인 int 타입 배열 선언
arr1[0] = 1; //첫 번째 원소를 1로 설정
std::cout << "arr1 배열의 첫 번째 원소: " << arr1[0] << std::endl;
std::array<int, 4> arr2 = {1, 2, 3, 4};
std::cout << "arr2의 모든 원소: ";
for (int i = 0; i < arr2.size(); i++)
std::cout << arr2[i] << " ";
std:: cout << std::endl;
이 예제 코드를 실행하면 다음과 같이 출력된다.
[] 연산자를 제공한다.[] 연산자에 접근하고자 하는 배열 원소 인덱스(index)을 지정할 경우, 빠른 동작을 위해 전달된 인덱스 값이 배열의 크기보다 작은지를 검사하지 않는다.at(index) 형식의 함수도 함께 제공한다.✔️ at(index)
- 인자로 전달된 index 값이 유효하지 않으면 std::out_of_range 예외(exception)를 발생시킨다.
-> at() 함수가 [] 연산자보다 조금 느린 편이지만, at() 함수를 잘 이용하면 예외를 적절하게 처리할 수 있다.
: 배열 인덱스를 사용자 입력으로 받는다든가, 또는 다른 이유로 인해 유효하지 않은 인덱스에 접근할 수 있는 상황이라면 다음과 같은 예외 처리 코드를 만들 수 있다.
std::array<int, 4> arr3 = {1, 2, 3, 4};
try
{
std::cout << arr3.at(3) << std::endl; //에러 아님
std::cout << arr3.at(4) << std::endl; //std::out_of_range 예외 발생
}
catch (const std::out_of_range& ex)
{
std::cerr << ex.what() << std::endl;
}
: std::array 객체를 다른 함수에 전달하는 방식은 기본 데이터 타입을 전달하는 것과 유사하다.
: 사용자 정의 함수 print()에 std::array 배열을 값으로 전달하는 예제 코드
void print(std::array<int, 5> arr)
{
for (auto ele : arr)
std::cout << ele << ", ";
}
std::array<int, 5> arr = {1, 2, 3, 4, 5};
print(arr);
이 예제 코드를 실행하면 다음과 같이 출력된다.
