다음을 통해 공유


lazy_split_view 클래스(C++ 표준 라이브러리)

구분 기호에 따라 범위를 하위 범위로 분할합니다. 구분 기호는 단일 요소 또는 요소 뷰일 수 있습니다. 구분 기호는 결과 하위 범위의 일부가 아닙니다.

a와 a split_view lazy_split_view 의 주요 차이점은 다음과 같습니다.

보기 범위를 분할할 수 있습니다.const 범위 유형
split_view 아니요 이상 지원합니다 forward_range .
lazy_split_view 이상 지원합니다 input_range .

"지연"을 lazy_split_view 만드는 것은 다음 구분 기호를 않는다는 것입니다. 즉, 지원할 수 input_range 있지만 split_view 적어도 forward_range필요합니다. input_range 이는 단일 패스인 반면 forward_range 다중 패스 반복을 허용하기 때문입니다.

범위를 분할해야 하는 경우가 아니면 더 효율적이므로 선호 split_view 합니다 const. 성능 split_view 과 관련하여 더 효율적입니다.

A lazy_split_view 는 반복기 증가 및 비교 split_view의 효율성이 낮지만 여전히 O(1)입니다. 구분 split_view 기호 간 거리가 CPU 캐시에 맞을 수 있을 만큼 충분히 작으면 A의 성능이 향상됩니다. 이 경우 구분 기호가 다음 하위 범위를 효과적으로 미리 캐시합니다.

구문

template<input_range V, forward_range Pattern>
    requires view<V> && view<Pattern> &&
    indirectly_comparable<iterator_t<V>, iterator_t<Pattern>, ranges::equal_to> &&
    (forward_range<V> || tiny_range<Pattern>)
class lazy_split_view : public view_interface<lazy_split_view<V, Pattern>>

템플릿 매개 변수

Pattern
구분 기호 시퀀스를 지정하는 뷰의 형식입니다.
(forward_range<V> || tiny-range <Pattern>) 요구 사항은 기본 범위가 아닌 forward_range경우 구분 기호가 여야 tiny_range임을 의미합니다. A tiny_range 는 크기가 0 또는 1인 정적 익스텐트를 가진 범위입니다. tiny_range<T>sized_range<T>T::size() 1보다 작거나 같은 상수 식이어야 합니다.

V
기본 뷰의 형식입니다.

특성

다음 항목에 대한 설명은 클래스 특성 보기를 참조 하세요.

범위 어댑터:lazy_split 기본 범위: 기본 범위 요소 형식과 동일한 뷰 반복기 범주를 충족하거나 더 높게 지정 input_range 해야 합니다. 기본 범위 요소 range_reference_t<V>형식: 크기 컬렉션: 공통 범위 없음: 기본 범위가 둘 다 forward_range 인 경우 예입니다.common 대여된 범위: Is const-iterable 없음: 기본 범위가 충족 forward_range 되고 const반복 가능한 경우에만

멤버

멤버 함수 설명
생성자 뷰를 생성합니다.
baseC++20 기본 범위를 가져옵니다.
beginC++20 뷰의 첫 번째 요소에 대한 반복기를 가져옵니다.
endC++20 보기의 끝에 있는 sentinel을 가져옵니다.
에서 상속됨 view_interface 설명
emptyC++20 보기가 비어 있는지 테스트합니다.
frontC++20 첫 번째 요소를 가져옵니다.
operator boolC++20 보기가 비어 있지 않은지 테스트합니다.

요구 사항

헤더: <ranges> (C++20 이후)

네임스페이스: std::ranges

컴파일러 옵션: /std:c++20 이상이 필요합니다.

생성자

의 인스턴스 생성 lazy_split_view

1) lazy_split_view() = default;
2) constexpr lazy_split_view(V base, Pattern pattern);
3) template<input_range R> requires constructible_from<V, views::all_t<R>> && 
        constructible_from<Pattern, single_view<range_value_t<R>>>
        constexpr lazy_split_view(R&& rg, range_value_t<R> e);

템플릿 매개 변수

Pattern
구분 기호의 형식입니다.

R
범위의 형식입니다.

V
기본 뷰의 형식입니다.

매개 변수

e 보기를 분할할 위치를 식별하는 단일 요소입니다. 요소는 결과 하위 범위의 일부가 아닙니다.

base
기본 보기입니다.

pattern
뷰를 분할할 위치를 식별하는 요소의 뷰입니다. 요소 보기는 결과 하위 범위의 일부가 아닙니다.

rg
분할할 범위입니다.

반환 값

lazy_split_view 하나 이상의 subranges를 포함하는 인스턴스입니다.

설명

범위를 만드는 lazy_split_view 가장 좋은 방법은 범위 어댑터를 사용하는 views::lazy_split 것입니다. 범위 어댑터는 뷰 클래스를 만드는 데 사용되는 방법입니다. 보기 형식은 사용자 고유의 사용자 지정 보기 형식을 만들려는 경우에만 노출됩니다.

1) 요소가 없는 A를 만듭니 lazy_split_view 다. 기본 뷰는 기본 생성됩니다. base() 는 .의 복사본을 반환합니다 V().
2) 구분 기호 시퀀스를 사용하여 뷰를 분할하여 만듭니 lazy_split_view 다.
3) 구분 기호 요소를 사용하여 뷰를 분할하여 만듭니 lazy_split_view 다.

예: lazy_split_view

// requires /std:c++20 or later
#include <ranges>
#include <iostream>
#include <vector>

int main()
{
    std::vector<int> rg{ 1, 2, 3, 1, 2, 3, 4, 5, 6 };

    // pipe syntax using range adaptor
    for (const auto& subrange : rg | std::views::split(3))
    {
        // Outputs:
        // 1 2
        // 1 2
        // 4 5 6
        for (const auto& elem : subrange)
        {
            std::cout << elem << ' ';
        }
        std::cout << '\n';
    }

    int delimiters[] = {2, 3};
    for (auto splitRange : std::views::split(rg, delimiters)) // ctor syntax
    {
        // outputs 1 1 4 5 6
        for (auto& i : splitRange)
        {
            std::cout << i << " ";
        }
    }
}
1 2
1 2
4 5 6
1 1 4 5 6

base

기본 뷰의 복사본을 가져옵니다.

// Uses a copy constructor to return the underlying view
1) constexpr V base() const & requires std::copy_constructible<V>;

// Uses a move constructor to return the underlying view
2) constexpr V base() &&;

매개 변수

없음

반품

기본 보기입니다.

begin

뷰의 첫 번째 요소에 대한 반복기를 가져옵니다.

constexpr auto begin();
constexpr auto begin() const requires forward_range<V> && forward_range<const V>

매개 변수

없음.

반환 값

뷰의 첫 번째 요소를 가리키는 반복기입니다.

요소가 10, 20 및 30인 벡터 그림입니다. 첫 번째 요소는 10을 포함하며 begin()이라는 레이블이 지정됩니다. 마지막 요소는 30을 포함하며 '마지막 요소'라는 레이블이 지정됩니다. 마지막 요소 뒤의 허수 상자는 sentinel을 나타내며 end()라는 레이블이 지정됩니다.

end

보기의 끝에 있는 sentinel을 가져옵니다.

1) constexpr auto end() const;
2) constexpr auto end() requires forward_range<V> && common_range<V>;

매개 변수

없음.

반환 값

뷰의 마지막 요소를 따르는 sentinel입니다.

요소가 10, 20 및 30인 벡터 그림입니다. 첫 번째 요소는 10을 포함하며 begin()이라는 레이블이 지정됩니다. 마지막 요소는 30을 포함하며 '마지막 요소'라는 레이블이 지정됩니다. 마지막 요소 뒤의 허수 상자는 sentinel을 나타내며 end()라는 레이블이 지정됩니다.

설명

2) forward_range<V> 요구 사항은 뷰 V 에 적어도 앞으로 반복기가 있음을 의미합니다. 범위 반복기에 대한 자세한 내용은 클래스 특성 보기를 참조 하세요. common_range<V> 요구 사항은 뷰 V 에 동일한 반복기 및 sentinel 형식이 있음을 의미합니다.

참고 항목

<ranges>
lazy_split 범위 어댑터split_view 클래스
클래스 보기