Namespaces
Variants

std::ranges::take_view<V>:: end

From cppreference.net
Ranges library
Range adaptors
constexpr auto end ( ) requires ( ! /*simple-view*/ < V > ) ;
(1) (C++20 이후)
constexpr auto end ( ) const requires ranges:: range < const V > ;
(2) (C++20 이후)

take_view 의 끝을 나타내는 센티넬 또는 반복자를 반환합니다. take_view 의 끝은 기본 범위의 count 번째 요소 다음 위치이거나, 기본 범위가 count 보다 적은 요소를 가지고 있을 경우 기본 범위의 끝입니다.

1) take_view :: /*sentinel*/ < false > , std:: default_sentinel_t , 또는 ranges:: iterator_t < V > 를 반환합니다.
2) take_view :: /*sentinel*/ < true > , std:: default_sentinel_t , 또는 ranges:: iterator_t < const V > 중 하나를 반환합니다.

오버로드 (1) V 단순 뷰(simple view) 인 경우(즉, V const V 가 동일한 반복자 및 센티넬 타입을 가진 뷰인 경우) 오버로드 해결에 참여하지 않습니다.

목차

매개변수

(없음)

반환값

결과는 const 한정이 있을 수 있는 기본 뷰 타입 Base , 즉 ( 1 ) 의 경우 V 또는 ( 2 ) 의 경우 const V 가 충족하는 컨셉에 따라 달라집니다.

base_ 를 기본 뷰로 설정합니다.

기본 뷰 타입이
다음을 만족하는 경우
random_access_range
아니오
sized_range ranges:: begin ( base_ ) +
ranges:: range_difference_t < Base_ > ( this - > size ( ) )
std:: default_sentinel
아니오
1) /*sentinel*/ < false > { ranges:: end ( base_ ) }
2) /*sentinel*/ < true > { ranges:: end ( base_ ) }

예제

#include <iostream>
#include <iterator>
#include <list>
#include <ranges>
#include <type_traits>
namespace ranges = std::ranges;
namespace views = std::views;
int main()
{
    const auto list1 = {3, 1, 4, 1, 5};
    const auto seq1{list1 | views::take(4)};
    static_assert(ranges::sized_range<decltype(seq1)> and
                  ranges::random_access_range<decltype(seq1)> and
                  std::is_same_v<decltype(seq1.end()), decltype(list1.end())>);
    for (auto it = seq1.begin(); it != seq1.end(); ++it)
        std::cout << *it << ' ';
    std::cout << '\n';
    std::list list2{2, 7, 1, 8, 2};
    const auto seq2{list2 | views::take(4)};
    static_assert(ranges::sized_range<decltype(seq2)> and
                  not ranges::random_access_range<decltype(seq2)> and
                  std::is_same_v<decltype(seq2.end()), std::default_sentinel_t>);
    for (auto it = seq2.begin(); it != std::default_sentinel; ++it)
        std::cout << *it << ' ';
    std::cout << '\n';
}

출력:

3 1 4 1
2 7 1 8

결함 보고서

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

DR 적용 대상 게시된 동작 올바른 동작
P2393R1 C++20 부호 있는 정수 클래스 타입과 부호 없는 정수 클래스 타입 간의 암시적 변환이 실패할 수 있음 명시적으로 변경됨

참고 항목

시작 부분을 가리키는 반복자를 반환합니다
(public member function)
범위의 끝까지 거리를 추적하는 반복자 어댑터
(class template)
(C++20)
센티넬과 take_view::begin 에서 반환된 반복자를 비교합니다
(function)