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
반복 가능한 경우에만
멤버
멤버 함수 | 설명 |
---|---|
생성자 | 뷰를 생성합니다. |
base C++20 |
기본 범위를 가져옵니다. |
begin C++20 |
뷰의 첫 번째 요소에 대한 반복기를 가져옵니다. |
end C++20 |
보기의 끝에 있는 sentinel을 가져옵니다. |
에서 상속됨 view_interface |
설명 |
empty C++20 |
보기가 비어 있는지 테스트합니다. |
front C++20 |
첫 번째 요소를 가져옵니다. |
operator bool C++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
하나 이상의 subrange
s를 포함하는 인스턴스입니다.
설명
범위를 만드는 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>
매개 변수
없음.
반환 값
뷰의 첫 번째 요소를 가리키는 반복기입니다.
end
보기의 끝에 있는 sentinel을 가져옵니다.
1) constexpr auto end() const;
2) constexpr auto end() requires forward_range<V> && common_range<V>;
매개 변수
없음.
반환 값
뷰의 마지막 요소를 따르는 sentinel입니다.
설명
2) forward_range<V>
요구 사항은 뷰 V
에 적어도 앞으로 반복기가 있음을 의미합니다. 범위 반복기에 대한 자세한 내용은 클래스 특성 보기를 참조 하세요. common_range<V>
요구 사항은 뷰 V
에 동일한 반복기 및 sentinel 형식이 있음을 의미합니다.