다음을 통해 공유


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

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

관련 뷰는 클래스입니다 lazy_split_view . 주요 차이점은 다음과 같습니다.split_view lazy_split_view

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

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

구문

template<forward_range V, forward_range Pattern>
    requires view<V> && view<Pattern> &&
    indirectly_comparable<iterator_t<V>, iterator_t<Pattern>, ranges::equal_to>
class split_view : public view_interface<split_view<V, Pattern>>;

템플릿 매개 변수

Pattern
구분 기호 시퀀스를 지정하는 뷰의 형식입니다.

V
기본 뷰의 형식입니다.

특성 보기

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

특성 설명
범위 어댑터 views::split
기본 범위 기본 범위와 동일
요소 형식 range_reference_t<V>
반복기 범주 보기 만족 forward_range
크기 아니요
반복 const가능 아니요
공통 범위 기본 범위가 충족되는 경우에만 common_range
빌린 범위 아니요

멤버

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

요구 사항

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

네임스페이스: std::ranges

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

생성자

의 인스턴스 생성 split_view

1) split_view() requires default_initializable<V> && default_initializable<Pattern> = default;
2) constexpr 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 split_view(R&& rg, range_value_t<R> e);

매개 변수

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

base
기본 보기입니다.

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

rg
분할할 범위입니다.

템플릿 매개 변수 형식에 대한 자세한 내용은 템플릿 매개 변수를 참조 하세요.

반환 값

split_view 하나 이상의 하위 범위가 포함된 인스턴스입니다.

설명

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

1) 기본 생성되는 값을 만듭니 split_view 다. 기본 뷰이며 pattern 기본 생성됩니다. base() 는 .의 복사본을 반환합니다 V().
2) 구분 기호 시퀀스를 사용하여 뷰를 분할하여 만듭니 split_view 다.
3) 단일 구분 기호를 사용하여 뷰를 분할하여 만듭니 split_view 다.

본보기 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
    {
        for (auto& i : splitRange)
        {
            std::cout << i << " "; // 1 1 4 5 6
        }
    }
}
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();

매개 변수

없음.

반환 값

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

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

end

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

constexpr auto end();

매개 변수

없음.

반환 값

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

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

참고 항목

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