Namespaces
Variants

std::ranges:: ref_view

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

requires std:: is_object_v < R >
class ref_view

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

ref_view 는 다른 view 의 요소들을 참조하는 range 입니다. 이는 해당 range 에 대한 참조를 감싸는 래퍼입니다.

목차

데이터 멤버

멤버 설명
R* r_ 기반 범위에 대한 포인터
( 설명 전용 멤버 객체* )

멤버 함수

주어진 범위를 참조하는 ref_view 를 생성합니다
(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::ref_view:: ref_view

template < /*different-from*/ < ref_view > T >

requires std:: convertible_to < T, R & > &&
requires { _FUN ( std:: declval < T > ( ) ) ; }

constexpr ref_view ( T && t ) ;
(C++20 이후)

r_ std:: addressof ( static_cast < R & > ( std:: forward < T > ( t ) ) ) 로 초기화합니다.

/*different-from*/ < T, U > std:: remove_cvref_t < T > std:: remove_cvref_t < U > 가 동일한 타입이 아닌 경우에만 만족되며, _FUN 의 오버로드는 void _FUN ( R & ) ; void _FUN ( R && ) = delete ; 로 선언됩니다.

매개변수

t - 참조할 범위

std::ranges::ref_view:: base

constexpr R & base ( ) const ;
(since C++20)

r_ 을 반환합니다.

std::ranges::ref_view:: begin

constexpr ranges:: iterator_t < R > begin ( ) const ;
(C++20 이후)

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

std::ranges::ref_view:: end

constexpr ranges:: sentinel_t < R > end ( ) const ;
(C++20 이후)

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

std::ranges::ref_view:: empty

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

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

std::ranges::ref_view:: size

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

r_ 이 참조하는 범위에 대해 ranges:: size ( * r_  ) 를 반환합니다.

std::ranges::ref_view:: reserve_hint

constexpr auto size ( ) const
requires ranges :: approximately_sized_range < R > ;
(C++26부터)

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

std::ranges::ref_view:: data

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

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

추론 가이드

template < class R >
ref_view ( R & ) - > ref_view < R > ;
(C++20 이후)

헬퍼 템플릿

template < class T >
constexpr bool enable_borrowed_range < ranges :: ref_view < T >> = true ;
(C++20 이후)

std::ranges::enable_borrowed_range 의 이 특수화는 ref_view borrowed_range 를 만족하도록 합니다.

참고 사항

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

예제

#include <iostream>
#include <ranges>
int main()
{
    const std::string s{"cosmos"};
    const std::ranges::take_view tv{s, 3};
    const std::ranges::ref_view rv{tv};
    std::cout
        << std::boolalpha
        << "call empty(): " << rv.empty() << '\n'
        << "call size() : " << rv.size() << '\n'
        << "call begin(): " << *rv.begin() << '\n'
        << "call end()  : " << *(rv.end() - 1) << '\n'
        << "call data() : " << rv.data() << '\n'
        << "call base() : " << rv.base().size() << '\n' // ~> tv.size()
        << "range-for   : ";
    for (const auto c : rv)
        std::cout << c;
    std::cout << '\n';
}

출력:

call empty(): false
call size() : 3
call begin(): c
call end()  : s
call data() : cosmos
call base() : 3
range-for   : cos

결함 보고서

다음의 동작 변경 결함 보고서들은 이전에 발표된 C++ 표준에 소급 적용되었습니다.

DR 적용 대상 게시된 동작 올바른 동작
P2325R3 C++20 기본 생성자가 제공되었으며
view 는 반드시 default_initializable 이어야 함
요구 사항과 함께 제거됨

참고 항목

CopyConstructible CopyAssignable 참조 래퍼
(클래스 템플릿)
일부 range 을 고유 소유하는 view
(클래스 템플릿)
range 의 모든 요소를 포함하는 view
(별칭 템플릿) (범위 어댑터 객체)