array::at

array::at (범위 검사와 함께 원소 접근하기)

지정한 위치의 원소에 대한 참조를 반환하되, 경계 검사(bounds checking)까지 해주는 멤버 함수예요. std::array 멤버로, 위치가 범위를 벗어나면 예외를 던져요. C++11부터 있어요.

출처: cppreference

본문

atpos 위치의 원소 참조를 돌려주는데, operator[]와 달리 반드시 범위를 검사해요.

reference at( size_type pos );        // (1)

const_reference at( size_type pos ) const;   // (2)

위치 pos가 컨테이너 범위 안에 없으면 std::out_of_range 타입의 예외가 던져져요.

  • 매개변수 pos: 반환할 원소의 위치예요.
  • 반환 값: 요청한 원소에 대한 참조예요.
  • 예외: pos >= size()이면 std::out_of_range를 던져요.
  • 복잡도: 상수 시간이에요.

C++17부터 at은 constexpr로 지정됐고, C++14부터 상수 객체 버전이 constexpr이에요. 그래서 컴파일 타임 계산에서도 쓰일 수 있어요.

음수 인덱스로 잘못 접근해도 안전한 편인데, 그 값이 size_type(부호 없는 타입)으로 변환되면서 보통 매우 큰 값이 되어 범위를 벗어났다고 판정돼요.

조건부로 안전한 접근이 필요할 땐 at을, 성능이 최우선이고 범위를 직접 보장할 수 있을 땐 operator[]를 쓰는 게 일반적이에요.

더 알아보기 (Learn more)

cppreference