Namespaces
Variants

std::ranges:: views:: take, std::ranges:: take_view

From cppreference.net
Ranges library
Range adaptors
헤더에 정의됨 <ranges>
template < ranges:: view V >

class take_view

: public ranges:: view_interface < take_view < V >>
(1) (C++20부터)
namespace views {

inline constexpr /* unspecified */ take = /* unspecified */ ;

}
(2) (C++20부터)
호출 시그니처
template < ranges:: viewable_range R >

requires /* see below */
constexpr ranges:: view auto

take ( R && r, ranges:: range_difference_t < R > count ) ;
(C++20부터)
template < class DifferenceType >
constexpr /* range adaptor closure */ take ( DifferenceType && count ) ;
(C++20부터)
1) 기본 시퀀스의 요소들로부터 시작하여 주어진 경계에서 끝나는 view 를 나타내는 범위 어댑터.
2) views::take is a RangeAdaptorObject . The expression views :: take ( e, f ) results in a view that represents the first f elements from e . The result is not necessarily a take_view .

views :: take ( e, f ) 는 다음 표현식과 표현식 동등 합니다 (여기서 T std:: remove_cvref_t < decltype ( ( e ) ) > 이고 D ranges:: range_difference_t < decltype ( ( e ) ) > 입니다):

(C++23부터)
  • 그렇지 않으면, take_view ( e, f ) .
In all cases, decltype ( ( f ) ) must model std:: convertible_to < D > .

take_view 는 기본 뷰 V 가 해당 개념들을 모델링할 때 contiguous_range , random_access_range , bidirectional_range , forward_range , input_range , 그리고 sized_range 개념들을 모델링합니다. 기본 뷰 V random_access_range sized_range 를 모두 모델링할 때 common_range 를 모델링합니다.

목차

데이터 멤버

멤버 설명
V base_ 기반 뷰
( 설명 전용 멤버 객체* )
ranges:: range_difference_t < V > count_ 취할 요소의 개수
( 설명 전용 멤버 객체* )

멤버 함수

take_view 를 생성합니다
(public 멤버 함수)
기본(적응된) 뷰의 복사본을 반환합니다
(public 멤버 함수)
시작을 가리키는 반복자를 반환합니다
(public 멤버 함수)
끝을 가리키는 반복자나 센티널을 반환합니다
(public 멤버 함수)
기본(적응된) 범위가 sized_range 를 만족할 때만 요소의 개수를 반환합니다
(public 멤버 함수)
결과 approximately_sized_range 의 대략적인 크기를 반환합니다
(public 멤버 함수)
std::ranges::view_interface 로부터 상속됨
파생 뷰가 sized_range forward_range 를 만족할 때만 비어 있는지 여부를 반환합니다
( std::ranges::view_interface<D> 의 public 멤버 함수)
(C++23)
범위의 시작을 가리키는 상수 반복자를 반환합니다
( std::ranges::view_interface<D> 의 public 멤버 함수)
(C++23)
범위의 상수 반복자에 대한 센티널을 반환합니다
( std::ranges::view_interface<D> 의 public 멤버 함수)
ranges::empty 가 적용 가능할 때만 파생 뷰가 비어 있지 않은지 여부를 반환합니다
( std::ranges::view_interface<D> 의 public 멤버 함수)
반복자 타입이 contiguous_iterator 를 만족할 때만 파생 뷰의 데이터 주소를 가져옵니다
( std::ranges::view_interface<D> 의 public 멤버 함수)
forward_range 를 만족할 때 파생 뷰의 첫 번째 요소를 반환합니다
( std::ranges::view_interface<D> 의 public 멤버 함수)
bidirectional_range common_range 를 만족할 때만 파생 뷰의 마지막 요소를 반환합니다
( std::ranges::view_interface<D> 의 public 멤버 함수)
random_access_range 를 만족할 때만 파생 뷰의 n 번째 요소를 반환합니다
( std::ranges::view_interface<D> 의 public 멤버 함수)

추론 가이드

중첩 클래스

(C++20)
센티널 타입
( 설명 전용 멤버 클래스 템플릿* )

헬퍼 템플릿

template < class T >

constexpr bool enable_borrowed_range < std :: ranges :: take_view < T >> =

ranges:: enable_borrowed_range < T > ;
(C++20부터)

ranges::enable_borrowed_range 의 이 특수화는 기본 뷰가 이를 만족할 때 take_view borrowed_range 를 만족하도록 합니다.

예제

#include <algorithm>
#include <iostream>
#include <ranges>
int main()
{
    namespace views = std::views;
    auto print = [](char x){ std::cout << x; };
    for (const char nums[]{'1', '2', '3'};
         int n : views::iota(0, 5))
    {
        std::cout << "take(" << n << "): ";
        // 안전하게 최대 min(n, nums.size()) 개의 요소만 취함:
        std::ranges::for_each(nums | views::take(n), print);
        std::cout << '\n';
    }
}

출력:

take(0): 
take(1): 1
take(2): 12
take(3): 123
take(4): 123

결함 보고서

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

DR 적용 대상 게시된 동작 올바른 동작
LWG 3407 C++20 views::take 가 크기가 있는 임의 접근 범위 생성에
실패하는 경우가 있음
결과 타입이 조정되어
생성이 항상 유효하도록 함
LWG 3494 C++20 take_view borrowed_range 가 아닌 경우 기본 뷰가 borrowed_range 인 경우
해당 범위가 됨

참고 항목

반복자와 개수로부터 서브레인지를 생성함
(커스터마이제이션 포인트 객체)
다른 view 의 초기 요소들로 구성된 view 로, 술어(predicate)가 false 를 반환하는 첫 번째 요소까지 포함
(클래스 템플릿) (레인지 어댑터 객체)
지정된 개수의 요소들을 새로운 위치로 복사함
(알고리즘 함수 객체)