배열(array)은 동일한 데이터 타입의 요소들이 연속된 메모리 공간에 저장되어 있는 자료구조입니다.
C++ 표준 라이브러리(STL)에는 배열의 기능을 지원하기 위한 다양한 메서드들이 제공되며, 그중 하나가 바로 array at() 함수입니다.
array at() 함수는 특정 인덱스 위치에 있는 요소의 참조(reference)를 반환하는 데 사용됩니다. 일반적인 대괄호([]) 접근 방식과 달리, 유효하지 않은 인덱스에 대해 예외를 발생시켜 안전한 접근을 보장한다는 점이 큰 장점입니다.
문법(Syntax)
array at() 함수의 기본 문법은 다음과 같습니다.
array_name.at(i);
매개변수(Parameters)
at() 함수는 단일 매개변수를 받습니다. 이 매개변수는 함수를 통해 접근하고자 하는 요소의 인덱스(index) 값입니다.
반환값(Return Value)
함수는 호출 시 전달된 인덱스에 해당하는 요소를 반환합니다. 만약 유효 범위를 벗어난 잘못된 인덱스 값이 전달되면, 함수는 out_of_range 예외(exception)를 발생시킵니다.
예제 1: array::at() 함수의 기본 사용법
다음은 array::at() 함수가 정상적으로 동작하는 모습을 보여주는 프로그램입니다.
#include <bits/stdc++.h>
using namespace std;
int main(){
array<float, 4> arr = { 12.1, 67.3, 45.0, 89.1 };
cout << "인덱스 1의 요소는 " << arr.at(1) << endl;
return 0;
}출력 결과
인덱스 1의 요소는 67.3
위 예제에서 arr.at(1)은 배열의 두 번째 요소인 67.3을 반환합니다. 인덱스는 0부터 시작하므로 인덱스 1이 두 번째 요소에 해당한다는 점에 유의하세요.
예제 2: 배열 길이를 초과하는 인덱스 사용 시 오류
다음은 배열의 길이보다 큰 인덱스 값을 사용했을 때 발생하는 오류를 보여주는 프로그램입니다.
#include <bits/stdc++.h>
using namespace std;
int main(){
array<float, 4> arr = { 12.1, 67.3, 45.0, 89.1 };
cout << "인덱스 8의 요소는 " << arr.at(8) << endl;
return 0;
}출력 결과
terminate called after throwing an instance of 'std::out_of_range' what(): array::at: __n (which is 8) >= _Nm (which is 4) Aborted
배열의 크기는 4이지만 인덱스 8에 접근하려고 했기 때문에, 프로그램은 std::out_of_range 예외를 던지고 비정상 종료됩니다. 이처럼 at() 함수는 잘못된 접근을 조용히 넘어가지 않고 명확하게 오류를 알려주므로, 디버깅 시 매우 유용합니다.
정리
C++ STL의 at() 함수는 배열 요소에 안전하게 접근할 수 있는 방법을 제공합니다. 유효하지 않은 인덱스 접근 시 out_of_range 예외를 발생시켜 프로그램의 안정성을 높일 수 있으므로, 경계 검사가 필요한 상황에서는 대괄호([]) 연산자 대신 at() 함수를 사용하는 것이 좋습니다.