std::data

std::data (연속 메모리 포인터)

범위의 요소를 담은 메모리 블록을 가리키는 포인터를 돌려주는 함수예요. C++17부터 있어요.

출처: cppreference

본문

다양한 컨테이너 헤더와 <iterator> 헤더에 정의돼 있어요.

// (1) C++17
template< class C >
constexpr auto data( C& c ) noexcept(noexcept(c.data()))
    -> decltype(c.data());

// (2) C++17
template< class C >
constexpr auto data( const C& c ) noexcept(noexcept(c.data()))
    -> decltype(c.data());

// (3) C++17 (noexcept)
template< class T, std::size_t N >
constexpr T* data( T (&array)[N] ) noexcept;

// (4) C++17, cdata
template< class C >
constexpr auto cdata( const C& c ) noexcept(noexcept(std::data(c)))
    -> decltype(std::data(c));

범위의 요소들을 담은 메모리 블록을 가리키는 포인터를 돌려줘요.

  • 1,2) 컨테이너 cdata()를 반환해요.
    1. 배열의 첫 요소를 가리키는 포인터를 돌려줘요.
  • cdataconst 데이터 포인터를 돌려줘요.

반환값

범위의 요소들을 담은 메모리 블록을 가리키는 포인터예요.

예제

#include <iostream>
#include <vector>
#include <iterator>

int main()
{
    std::vector<int> v = {3, 1, 4};
    int* p = std::data(v);
    int a[3] = {1, 2, 3};
    int* pa = std::data(a);
    std::cout << p[1] << ' ' << pa[2] << '\n'; // "1 3"
}

더 알아보기 (Learn more)

cppreference