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
이 기본 클래스에서 파생되는 클래스의 형식입니다.
멤버
멤버 함수 | 설명 |
---|---|
back C++20 |
파생 뷰의 마지막 요소를 가져옵니다. |
data C++20 |
파생 뷰의 첫 번째 요소에 대한 포인터를 가져옵니다. |
empty C++20 |
파생 보기가 비어 있는지 테스트합니다. |
front C++20 |
파생 보기에서 첫 번째 요소를 가져옵니다. |
size C++20 |
파생 보기의 요소 수를 가져옵니다. |
연산자 | 설명 |
operator[] C++20 |
지정된 위치에 있는 요소를 가져옵니다. |
operator bool C++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()
클래스 보기