std::ranges:: views:: split, std::ranges:: split_view
|
헤더에 정의됨
<ranges>
|
||
|
template
<
ranges::
forward_range
V,
ranges::
forward_range
Pattern
>
requires
ranges::
view
<
V
>
&&
|
(1) | (C++20 이후) |
|
namespace
views
{
inline
constexpr
/* 지정되지 않음 */
split
=
/* 지정되지 않음 */
;
|
(2) | (C++20 이후) |
|
호출 시그니처
|
||
|
template
<
ranges::
viewable_range
R,
class
Pattern
>
requires
/* 아래 참조 */
|
(C++20 이후) | |
|
template
<
class
Pattern
>
constexpr /* 범위 어댑터 클로저 */ split ( Pattern && pattern ) ; |
(C++20 이후) | |
split_view
는 기본
forward_range
와
common_range
개념을 각각 모델링할 때 해당 개념들을 모델링합니다.
내부 범위(
ranges::
range_reference_t
<
split_view
>
)는
ranges::
subrange
<
ranges::
iterator_t
<
V
>>
로서,
common_range
을 모델링하며,
ranges::
iterator_t
<
V
>
가
std::
sized_sentinel_for
<
ranges::
iterator_t
<
V
>>
를 모델링할 때
sized_range
를 모델링합니다. 또한
V
가 해당 개념들을 모델링할 때
contiguous_range
,
random_access_range
,
bidirectional_range
, 그리고
forward_range
을 모델링합니다.
lazy_split_view
와 달리,
split_view
는 부분 범위의 연속성을 유지하므로 문자열 분할에 적합합니다.
목차 |
데이터 멤버
| 멤버 | 설명 |
V
base_
(private)
|
기반(적응된)
view
( 설명 전용 멤버 객체* ) |
Pattern
pattern_
(private)
|
기반
view
를 분할하는 데 구분자로 사용되는 패턴 객체
( 설명 전용 멤버 객체* ) |
non-propagating-cache
<
ranges::
subrange
<
ranges::
iterator_t
<
V
>>>
cached_begin_
(private)
|
첫 번째
begin()
호출 결과를 캐시하는 객체
( 설명 전용 멤버 객체* ) |
멤버 함수
split_view
를 생성합니다
(public member function) |
|
|
기본(적응된) 뷰의 복사본을 반환합니다
(public member function) |
|
|
시작 부분에 대한 반복자를 반환합니다
(public member function) |
|
|
끝 부분에 대한 반복자나 센티널을 반환합니다
(public member function) |
|
|
패턴의 다음 발생을 검색합니다
( exposition-only member function* ) |
|
std::ranges::view_interface 로부터 상속됨 |
|
파생된 뷰가 비어 있는지 여부를 반환합니다 (
sized_range
또는
forward_range
를 만족하는 경우에만 제공됨)
(
std::ranges::view_interface<D>
의 public member function)
|
|
|
(C++23)
|
범위의 시작 부분에 대한 상수 반복자를 반환합니다
(
std::ranges::view_interface<D>
의 public member function)
|
|
(C++23)
|
범위의 상수 반복자에 대한 센티널을 반환합니다
(
std::ranges::view_interface<D>
의 public member function)
|
|
파생된 뷰가 비어 있지 않은지 여부를 반환합니다 (
ranges::empty
가 적용 가능한 경우에만 제공됨)
(
std::ranges::view_interface<D>
의 public member function)
|
|
파생된 뷰의 첫 번째 요소를 반환합니다 (
forward_range
를 만족하는 경우에만 제공됨)
(
std::ranges::view_interface<D>
의 public member function)
|
|
중첩 클래스
|
반복자 타입
( 설명 전용 멤버 클래스* ) |
|
|
센티넬 타입
( 설명 전용 멤버 클래스* ) |
추론 가이드
참고 사항
P2210R2
이전에는,
split_view
가
지연(lazy)
방식의 분할 메커니즘을 사용했기 때문에, 기본 뷰의 양방향, 임의 접근, 또는 연속 속성을 유지할 수 없었으며, 내부 범위의 반복자 타입을 기본 뷰의 반복자 타입과 동일하게 만들 수 없었습니다. 결과적으로,
P2210R2
에 의해 재설계되었으며, 지연 메커니즘은
lazy_split_view
로 이동되었습니다.
구분자
pattern
은 일반적으로 일반 문자열 리터럴이어서는 안 됩니다. 널 종결자를 구분자의 필수 부분으로 간주하기 때문입니다. 따라서 대신
std::string_view
리터럴을 사용하는 것이 바람직합니다.
예제
#include <iomanip> #include <iostream> #include <ranges> #include <string_view> int main() { using std::operator""sv; constexpr auto words{"Hello^_^C++^_^20^_^!"sv}; constexpr auto delim{"^_^"sv}; for (const auto word : std::views::split(words, delim)) // string_view의 C++23 범위 생성자 사용: std::cout << std::quoted(std::string_view(word)) << ' '; std::cout << '\n'; }
출력:
"Hello" "C++" "20" "!"
결함 보고서
다음의 동작 변경 결함 보고서들은 이전에 발표된 C++ 표준에 소급 적용되었습니다.
| DR | 적용 대상 | 게시된 동작 | 올바른 동작 |
|---|---|---|---|
| P2210R2 | C++20 |
기존
split_view
는 사용하기 너무 지연(lazy)되어 있었음
|
재설계됨 |
참고 항목
다른
view
를 구분자로 분할하여 얻은 하위 범위들에 대한
view
(클래스 템플릿) (범위 어댑터 객체) |
|
|
(C++20)
|
range
s
의
view
를 평탄화하여 얻은 시퀀스로 구성된
view
(클래스 템플릿) (범위 어댑터 객체) |