mdspan
mdspan (std::mdspan — 다차원 배열 뷰)
std::mdspan은 C++23에서 도입된 비소유(non-owning) 다차원 배열 뷰예요. 연속 메모리를 다차원 인덱스로 접근할 수 있게 해 주며, span의 다차원 확장으로 볼 수 있어요.
출처: cppreference
본문
std::mdspan는 C++23에서 도입된 다차원 비소유 뷰예요. 하나의 연속 메모리 영역을 여러 차원의 인덱스로 매핑해 접근하게 해 줘요.
주요 특징은 다음과 같아요.
- 포인터(데이터) + 각 차원의 크기(extents) + 레이아웃 매핑(mapping) + 접근자(accessor)로 구성돼요.
- 기본 레이아웃은 행 우선(row-major,
layout_right)과 열 우선(layout_left)을 제공해요. - 모든 차원의 크기를 런타임에 정할 수도(
dextents), 컴파일 타임에 정할 수도 있어요(extents<...>). - 소유하지 않으므로 수명 관리는 사용자가 해야 해요.
- 선형 대수, 이미지 처리, 텐서 계산 등 다차원 데이터를 다루는 용도로 설계됐어요.
템플릿 매개변수
ElementType: 원소 타입.Extents: 차원 크기(extents) 타입.LayoutPolicy: 레이아웃 매핑 정책 (layout_right,layout_left,layout_stride등).AccessorPolicy: 원소 접근 정책.
멤버 타입
element_type,value_type,size_type,difference_typeindex_type,rank_type,layout_type,accessor_type,mapping_typepointer,reference,const_reference
멤버 함수
- 생성자,
operator= - 관찰자:
rank,rank_dynamic,extent(r),extents,size,mapping,accessor,data_handle - 접근:
operator[](다차원 인덱스),stride
참고
mdspan은 소유하지 않는 뷰이므로, 원본 버퍼의 수명이 뷰보다 길어야 해요. std::mdarray(C++26)는 소유형 다차원 배열이에요.