Namespaces
Variants

std::ranges:: owning_view

From cppreference.net
Ranges library
Range adaptors
헤더에 정의됨 <ranges>
template < ranges:: range R >

requires std:: movable < R > && ( ! /*is-initializer-list*/ < R > )
class owning_view

: public ranges:: view_interface < owning_view < R >>
(C++20 이후)

owning_view view range 에 대한 독점적인 소유권을 가지는 뷰입니다. 이는 이동 전용(move-only)이며 해당 range 를 내부에 저장합니다.

/*is-initializer-list*/ < R > 상수는 requires 절에서 true 인 경우에만, 그리고 그 경우에 std:: remove_cvref_t < R > std::initializer_list 의 특수화(specialization)일 때입니다.

목차

데이터 멤버

멤버 설명
R r_ 기반 범위
( 설명 전용 멤버 객체* )

멤버 함수

owning_view 를 값 초기화하거나 이동 생성하여 저장된 범위를 구성합니다
(public member function)
저장된 범위를 이동 할당합니다
(public member function)
저장된 범위에 대한 참조를 반환합니다
(public member function)
저장된 범위의 시작 반복자를 반환합니다
(public member function)
저장된 범위의 센티널을 반환합니다
(public member function)
저장된 범위가 비어 있는지 확인합니다
(public member function)
저장된 sized_range 의 크기를 반환합니다
(public member function)
저장된 approximately_sized_range 의 대략적인 크기를 반환합니다
(public member function)
저장된 contiguous_range 의 시작 부분에 대한 포인터를 반환합니다
(public member function)
std::ranges::view_interface 로부터 상속됨
(C++23)
범위의 시작을 가리키는 상수 반복자를 반환합니다
( std::ranges::view_interface<D> 의 public member function)
(C++23)
범위의 상수 반복자에 대한 센티널을 반환합니다
( std::ranges::view_interface<D> 의 public member function)
파생된 뷰가 비어 있지 않은지 반환합니다. ranges::empty 가 적용 가능한 경우에만 제공됩니다
( std::ranges::view_interface<D> 의 public member function)
파생된 뷰의 첫 번째 요소를 반환합니다. forward_range 를 만족하는 경우에 제공됩니다
( std::ranges::view_interface<D> 의 public member function)
파생된 뷰의 마지막 요소를 반환합니다. bidirectional_range common_range 를 만족하는 경우에만 제공됩니다
( std::ranges::view_interface<D> 의 public member function)
파생된 뷰의 n 번째 요소를 반환합니다. random_access_range 를 만족하는 경우에만 제공됩니다
( std::ranges::view_interface<D> 의 public member function)

std::ranges::owning_view:: owning_view

owning_view ( ) requires std:: default_initializable < R > = default ;
(1) (since C++20)
owning_view ( owning_view && other ) = default ;
(2) (since C++20)
constexpr owning_view ( R && t ) ;
(3) (since C++20)
1) 기본 생성자. 기본 멤버 초기화자( = R ( ) )에 의해 r_ 을 값 초기화합니다.
2) 이동 생성자. other r_ 에서 이동 생성합니다.
3) t 에서 r_ 을 이동 생성합니다.

매개변수

other - 이동할 다른 owning_view
t - 이동할 범위

참고 사항

owning_view 은 명시적으로 복사 생성자를 정의하지 않습니다. owning_view 은 이동 전용입니다.

std::ranges::owning_view:: operator=

owning_view & operator = ( owning_view && other ) = default ;
(C++20 이후)

이동 할당 연산자. r_ other 의 것으로 이동 할당합니다.

매개변수

other - 이동할 다른 owning_view

반환값

* this

참고

owning_view 는 복사 할당 연산자를 명시적으로 정의하지 않습니다. owning_view 는 이동 전용(move-only)입니다.

std::ranges::owning_view:: base

constexpr R & base ( ) & noexcept ;
(1) (C++20 이후)
constexpr const R & base ( ) const & noexcept ;
(2) (C++20 이후)
constexpr R && base ( ) && noexcept ;
(3) (C++20 이후)
constexpr const R && base ( ) const && noexcept ;
(4) (C++20 이후)

저장된 범위에 대한 참조를 반환하며, 값 범주와 const 한정자를 유지합니다.

반환 값

1,2) r_
3,4) std :: move ( r_  )

std::ranges::owning_view:: begin

constexpr ranges:: iterator_t < R > begin ( ) ;
(1) (since C++20)
constexpr auto begin ( ) const requires ranges:: range < const R > ;
(2) (since C++20)

ranges::begin(r_) 를 반환합니다.

std::ranges::owning_view:: end

constexpr ranges:: sentinel_t < R > end ( ) ;
(1) (since C++20)
constexpr auto end ( ) const requires ranges:: range < const R > ;
(2) (since C++20)

r_ 에 대해 ranges:: end ( r_  ) 를 반환합니다.

std::ranges::owning_view:: empty

constexpr bool empty ( ) requires requires { ranges:: empty ( r_ ) ; } ;
(1) (C++20 이후)
constexpr bool empty ( ) const requires requires { ranges:: empty ( r_ ) ; } ;
(2) (C++20 이후)

ranges:: empty ( r_  ) 을 반환합니다.

std::ranges::owning_view:: size

constexpr auto size ( ) requires ranges:: sized_range < R > ;
(1) (C++20 이후)
constexpr auto size ( ) const requires ranges:: sized_range < const R > ;
(2) (C++20 이후)

r_ 에 대해 ranges:: size ( r_  ) 을 반환합니다.

std::ranges::owning_view:: reserve_hint

constexpr auto reserve_hint ( )
requires ranges :: approximately_sized_range < R > ;
(1) (since C++26)
constexpr auto reserve_hint ( ) const
requires ranges :: approximately_sized_range < const R > ;
(2) (since C++26)

ranges::reserve_hint(r_) 를 반환합니다.

std::ranges::owning_view:: data

constexpr auto data ( ) requires ranges:: contiguous_range < R > ;
(1) (C++20 이후)
constexpr auto data ( ) const requires ranges:: contiguous_range < const R > ;
(2) (C++20 이후)

ranges:: data ( r_  ) 를 반환합니다.

헬퍼 템플릿

template < class T >

constexpr bool enable_borrowed_range < std :: ranges :: owning_view < T >> =

ranges:: enable_borrowed_range < T > ;
(C++20부터)

ranges:: enable_borrowed_range 의 이 특수화는 owning_view 가 기본 범위가 이를 만족할 때 borrowed_range 를 만족하도록 합니다.

참고 사항

기능 테스트 매크로 표준 기능
__cpp_lib_ranges_reserve_hint 202502L (C++26) ranges::approximately_sized_range reserve_hint

예제

#include <cassert>
#include <iostream>
#include <ranges>
#include <string>
int main()
{
    using namespace std::literals;
    std::ranges::owning_view ov{"cosmos"s}; // 추론된 R의 타입은 std::string;
                                            // "ov"는 이 문자열의 유일한 소유자
    assert(
        ov.empty() == false &&
        ov.size() == 6 &&
        ov.size() == ov.base().size() &&
        ov.front() == 'c' &&
        ov.front() == *ov.begin() &&
        ov.back() == 's' &&
        ov.back() == *(ov.end() - 1) &&
        ov.data() == ov.base()
    );
    std::cout << "sizeof(ov): " << sizeof ov << '\n' // 일반적으로 sizeof(R)과 동일
              << "range-for: ";
    for (const char ch : ov)
        std::cout << ch;
    std::cout << '\n';
    std::ranges::owning_view<std::string> ov2;
    assert(ov2.empty());
//  ov2 = ov; // 컴파일 타임 오류: 복사 할당 연산자가 삭제됨
    ov2 = std::move(ov); // 정상
    assert(ov2.size() == 6);
}

가능한 출력:

sizeof(ov): 32
range-for: cosmos

참고 항목

다른 range 의 원소들을 참조하는 view
(클래스 템플릿)
range 의 모든 원소를 포함하는 view
(별칭 템플릿) (범위 어댑터 객체)