다음을 통해 공유


view_interface 클래스(C++ 표준 라이브러리)

네임스페이 스의 뷰 클래스에 std::ranges 대한 기본 클래스입니다. 이 클래스는 파생된 뷰 형식에 대한 일부 인터페이스를 구현합니다. 이 클래스를 사용자 고유의 보기 형식에 대한 기본 클래스로 사용하여 작성해야 하는 상용구의 수를 줄입니다.

구문

template<class Derived>
  requires std::is_class_v<Derived> && 
  std::same_as<Derived, std::remove_cv_t<Derived>>
class view_interface;

템플릿 매개 변수

Derived
이 기본 클래스에서 파생되는 클래스의 형식입니다.

멤버

멤버 함수 설명
backC++20 파생 뷰의 마지막 요소를 가져옵니다.
dataC++20 파생 뷰의 첫 번째 요소에 대한 포인터를 가져옵니다.
emptyC++20 파생 보기가 비어 있는지 테스트합니다.
frontC++20 파생 보기에서 첫 번째 요소를 가져옵니다.
sizeC++20 파생 보기의 요소 수를 가져옵니다.
연산자 설명
operator[]C++20 지정된 위치에 있는 요소를 가져옵니다.
operator boolC++20 파생 보기가 비어 있지 않은지 테스트합니다.

요구 사항

헤더: <ranges> (C++20 이후)

네임스페이스: std::ranges

컴파일러 옵션: /std:c++20 이상이 필요합니다.

back

파생 뷰의 마지막 요소를 가져옵니다.

constexpr auto back()
    requires ranges::bidirectional_range<Derived> &&
    ranges::common_range<Derived>;

constexpr auto back() const
    requires ranges::bidirectional_range<const Derived> && 
    ranges::common_range<const Derived>;

매개 변수

없음.

반환 값

파생 뷰의 마지막 요소입니다.

설명

파생 뷰는 충족 bidirectional_range 해야 하며 .common_range
빈 보기에 back() front() 대해 정의되지 않은 동작입니다.

data

파생 뷰의 첫 번째 요소에 대한 포인터를 가져옵니다.

constexpr auto data()
    requires std::contiguous_iterator<ranges::iterator_t<Derived>>;
constexpr auto data() const
    requires ranges::range<const Derived> &&
    std::contiguous_iterator<ranges::iterator_t<const Derived>>;

매개 변수

없음.

반환 값

파생 뷰의 첫 번째 요소에 대한 포인터입니다.

설명

파생 뷰의 반복기는 충족 contiguous_iterator해야 합니다.

empty

파생 보기가 비어 있는지 테스트합니다.

1) constexpr bool empty() requires ranges::forward_range<Derived>;
2) constexpr bool empty() const requires ranges::forward_range<const Derived>;

매개 변수

없음.

반환 값

파생 뷰에 요소가 없는 경우 반환 true 합니다. 그렇지 않으면 false을(를) 반환합니다.

설명

파생 뷰는 충족 std::ranges::forward_range해야 합니다.

front

파생 보기에서 첫 번째 요소를 가져옵니다.

constexpr auto front()
    requires ranges::forward_range<Derived>;
constexpr auto front() const
    requires ranges::forward_range<const Derived>;

매개 변수

없음.

반환 값

파생 뷰의 마지막 요소입니다.

설명

파생 뷰는 충족 forward_range해야 합니다.
front() 동작이 정의되지 않았습니다 std::ranges::empty_view.

size

파생 보기의 요소 수를 가져옵니다.

constexpr auto size() requires ranges::forward_range<Derived> &&
    std::sized_sentinel_for<ranges::sentinel_t<Derived>,
    ranges::iterator_t<Derived>>;
constexpr auto size() const requires ranges::forward_range<const Derived> &&
    std::sized_sentinel_for<ranges::sentinel_t<const Derived>,
    ranges::iterator_t<const Derived>>;

매개 변수

없음.

반환 값

파생 보기의 요소 수입니다.

설명

파생 뷰의 반복기는 충족 sized_sentinel_for해야 합니다.

operator[]

지정된 위치에 있는 요소를 가져옵니다.

template<ranges::random_access_range R = Derived>
constexpr decltype(auto) operator[](ranges::range_difference_t<R> pos);

template<ranges::random_access_range R = const Derived>
constexpr decltype(auto) operator[](ranges::range_difference_t<R> pos) const;

매개 변수

pos
반환할 요소의 시작 반복기를 기준으로 하는 위치입니다.

반환 값

시작 반복기를 기준으로 지정된 위치에 있는 요소입니다.

설명

파생 뷰는 충족 random_access_range해야 합니다.
이 연산자의 동작은 에 대해 std::ranges::empty_view정의되지 않습니다.

예: operator[]

// requires /std:c++20 or later
#include <ranges>
#include <iostream>
#include <vector>

int main()
{
    std::vector<int> v{1, 2, 3, 4, 5};
    std::ranges::drop_view dv = std::views::drop(v, 2);

    for (auto e : dv)
    {
        std::cout << e << ' '; // 3 4 5
    }

    std::cout << "\ndv[1] = " << dv[1];
}
3 4 5
dv[1] = 4

view_interface::operator bool

파생 보기가 비어 있지 않은지 테스트합니다.

explicit constexpr operator bool();
explicit constexpr operator bool() const;

매개 변수

없음.

반환 값

false 파생 뷰에 요소가 없는 경우 반환합니다(보기가 비어 있음). 그렇지 않으면 반환 true 됩니다(보기가 비어 있지 않음).

설명

파생 뷰의 반복기는 충족 std::ranges::forward_iterator해야 합니다.
이 연산자는 .에 해당합니다 !empty(). 이렇게 하면 작업할 범위에 뭔가가 있는지 테스트하기 위해 쓰기 if (someRange) {...} 가 편리합니다.
이 연산자의 동작은 에 대해 std::ranges::empty_view정의되지 않습니다.

예: operator bool

// requires /std:c++20 or later
#include <ranges>
#include <iostream>
#include <vector>

int main()
{
    std::vector<int> v{1, 2, 3, 4, 5};
    std::ranges::filter_view fv = std::views::filter(v, [](int e) { return e > 3; });

    bool isNotEmpty = static_cast<bool>(fv);
    std::cout << "Has elements greater than 3: " << std::boolalpha << isNotEmpty << '\n' >>;
}
Has elements greater than 3: true

참고 항목

<ranges>
ranges::begin()
ranges::data()
ranges::end()
ranges::empty()
ranges::size()
클래스 보기