Namespaces
Variants

std::ranges::take_view<V>:: begin

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

take_view 의 첫 번째 요소에 대한 반복자를 반환합니다.

1) std:: counted_iterator 또는 ranges:: iterator_t < V > 를 반환합니다.
2) std:: counted_iterator 또는 ranges:: iterator_t < const V > 를 반환합니다.

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

목차

매개변수

(없음)

반환값

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

base_ 를 기본 뷰로, count_ 를 기본 카운터로 설정합니다 ( take_view 가 기본 초기화된 경우 0 과 동일합니다).

기본 뷰 타입이
다음을 만족하는 경우 ...
random_access_range
아니오
sized_range ranges:: begin ( base_ ) std:: counted_iterator ( ranges:: begin ( base_ ) ,
ranges:: range_difference_t < Base_ > ( this - > size ( ) ) )
아니오 std:: counted_iterator ( ranges:: begin ( base_ ) , count_ )

예제

#include <concepts>
#include <forward_list>
#include <iostream>
#include <ranges>
#include <string_view>
#include <type_traits>
using namespace std::literals;
int main()
{
    {
        static constexpr auto v = {"∀x"sv, "∃y"sv, "ε"sv, "δ"sv};
        auto view = std::ranges::take_view(v, 8);
        auto iter = view.begin();
        std::cout << *iter << '\n';
        static_assert(
            std::ranges::sized_range<decltype(v)> and
            std::ranges::random_access_range<decltype(v)> and
            std::is_same_v<decltype(iter), decltype(std::ranges::begin(v))>
        );
    }
    {
        std::forward_list v = {"Ax"sv, "Ey"sv, "p"sv, "q"sv};
        auto view = std::ranges::take_view(v, 8);
        auto iter = view.begin();
        std::cout << *iter << '\n';
        static_assert(
            not std::ranges::sized_range<decltype(v)> and
            not std::ranges::random_access_range<decltype(v)> and
            std::is_same_v<decltype(iter),
                std::counted_iterator<
                    std::forward_list<std::string_view>::iterator>>
        );
    }
}

출력:

∀x
Ax

결함 보고서

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

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

참고 항목

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