span
span (std::span — 연속 원소 뷰)
std::span은 연속된 객체 시퀀스에 대한 관점(view)을 제공하는 비소유(non-owning) 뷰예요. std::array, std::vector, C 배열 등 연속 메모리를 가리키며 소유하지 않아요.
출처: cppreference
본문
std::span는 C++20에서 도입된 비소유 뷰로, 연속된 객체 시퀀스에 대한 "창" 역할을 해요. 다음 특징이 있어요.
- 포인터와 크기(길이)로 구성되며, 소유하지 않아요(non-owning). 원소 수명에 관여하지 않아요.
std::array,std::vector, C 배열 등을span으로 변환해 함수 인자로 넘길 수 있어요.std::span자체는 모든 멤버 함수가constexpr이라 컴파일 타임에도 쓸 수 있어요.- 문자열 리터럴 등에는
std::string_view를 쓰고, 바이너리 데이터 뷰에는span을 주로 써요.
span은 "보기만 하는" 뷰이므로, 원소를 수정하려면 T가 비-const 타입의 span이어야 해요. const span<T>와 span<const T>는 구별돼요.
템플릿 매개변수
T: 원소 타입.Extent: 컴파일 타임 크기(std::dynamic_extent면 동적 크기).
멤버 타입
element_type,value_type,size_type,difference_typepointer,const_pointer,reference,const_referenceiterator,const_iterator,reverse_iterator,const_reverse_iterator
멤버 함수
- 생성자,
operator= - 원소 접근:
front,back,operator[],data - 이터레이터:
begin,end,rbegin,rend - 관찰자:
size,size_bytes,empty - 부분 뷰:
first,last,subspan
비멤버 함수
std::as_bytes,std::as_writable_bytes: 원소를 바이트 뷰로 재해석- 범위 인자로 받는 모든
std::ranges알고리즘에span을 그대로 넘길 수 있어요.