array::data

array::data (내부 저장 공간의 포인터 얻기)

배열의 요소 저장소 역할을 하는 내부 배열의 첫 원소를 가리키는 포인터를 반환하는 멤버 함수예요. 상수 시간에 동작해요. C++11부터 있어요.

출처: cppreference

본문

data()는 요소 저장 공간의 첫 원소를 가리키는 포인터를 돌려줘요.

T* data() noexcept;            // (1)

const T* data() const noexcept;  // (2)

이 포인터는 [data(), data() + size()) 범위가 항상 유효한 범위가 되도록 해줘요. 컨테이너가 비어 있더라도 그 범위 자체는 유효한데, 그 경우 data()는 역참조할 수 없어요.

정리하면:

  • 반환 값: 내부 요소 저장소를 가리키는 포인터예요. 비어 있지 않은 컨테이너에서는 첫 원소의 주소와 같아요.
  • 복잡도: 상수 시간.
  • 참고: size()가 0이면 data()는 널 포인터가 될 수도, 아닐 수도 있어요. 보장되지 않아요.

레거시 C 함수에 배열을 넘길 때 &container[0]보다 container.data()를 쓰는 게 선호돼요. 빈 배열에서 &container[0]는 문제가 될 수 있으니까요. C++20의 std::span으로 감싸면 포인터/크기를 따로 넘기는 것보다 더 안전한 대안이 돼요.

std::array<int, 4> container{1, 2, 3, 4};
pointer_func(container.data(), container.size());  // C API에 넘길 때

요소 저장소에 직접 접근해 연속 메모리를 다뤄야 할 때 data()를 사용하면 돼요.

더 알아보기 (Learn more)

cppreference