Namespaces
Variants

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

From ko.cppreference.net
 
 
Ranges 라이브러리
Range 어댑터
 
 
constexpr auto begin() requires (!/*simple-view*/<V>);
(1) (C++20부터)
constexpr auto begin() const requires ranges::range<const V>;
(2) (C++20부터)

take_view의 첫 번째 요소를 가리키는 반복자를 반환합니다. 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가 동일한 반복자 및 sentinel 유형을 가진 뷰인 경우) 오버로드 해결에 참여하지 않습니다.

매개변수

(없음)

반환값

결과는 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)