std::ranges::views::join_with, std::ranges::join_with_view
cppreference.net에서 가져옴
| (1) <ranges>
|
||
template< ranges::input_range V, ranges::forward_range Pattern >
requires ranges::view<V> &&
ranges::input_range<ranges::range_reference_t<V>> &&
ranges::view<Pattern> &&
/*concatable*/<ranges::range_reference_t<V>, Pattern>
class join_with_view :
ranges::view_interface<join_with_view<V, Pattern>>
|
헤더에 정의됨 | (C++23부터) |
namespace views {
inline constexpr /* unspecified */ join_with = /* unspecified */;
}
|
(2) | (C++23부터) |
| 호출 시그니처 |
||
template< ranges::viewable_range R, class Pattern >
requires /* see below */
constexpr ranges::view auto join_with( R&& r, Pattern&& pattern );
|
(C++23부터) | |
template< class Pattern >
constexpr /* range adaptor closure */ join_with( Pattern&& pattern );
|
(C++23부터) | |
1) 범위의 뷰를 평면화하여 얻은 시퀀스로 구성된 view를 나타내는 범위 어댑터로, 뷰의 요소 사이사이에 구분자의 모든 요소가 삽입됩니다. 구분자는 단일 요소 또는 요소의 뷰일 수 있습니다.
/*concatable*/의 정의는 std::ranges::concat_view를 참조하십시오.2) RangeAdaptorObject.
views::join_with(e, f) 표현식은 적합한 부분 표현식 과 에 대해 join_with_view(e, f)과 eexpression-equivalentf합니다.join_with_view는 input_range를 모델링합니다.
join_with_view는 다음 조건에서 forward_range를 모델링합니다:
ranges::range_reference_t<V>가 참조이고,V와ranges::range_reference_t<V>가 각각 forward_range를 모델링하는 경우.
join_with_view는 다음 조건에서 bidirectional_range를 모델링합니다:
ranges::range_reference_t<V>가 참조이고,V,ranges::range_reference_t<V>,Pattern가 각각 bidirectional_range를 모델링하며,ranges::range_reference_t<V>와Pattern가 각각 common_range를 모델링하는 경우.
join_with_view는 다음 조건에서 common_range를 모델링합니다:
ranges::range_reference_t<V>가 참조이고,V와ranges::range_reference_t<V>가 각각 forward_range와 common_range를 모델링하는 경우.
중첩 타입
| 유형 | 정의 |
InnerRng
|
ranges::
range_reference_t
<
V
>
( 설명 전용 멤버 유형* ) |
데이터 멤버
| 멤버 | 설명 |
V base_
|
기반(어댑티드) 뷰 (설명 전용 멤버 객체*) |
Pattern pattern_
|
패턴 객체 (설명 전용 멤버 객체*) |
non-propagating-cache <ranges::iterator_t<V>> outer_it_ ( V이 forward_range를 모델링하지 않는 경우에만 존재)
|
외부 반복자의 캐시 (설명 전용 멤버 객체*) |
non-propagating-cache <std::remove_cv_t<InnerRng >> inner_ ( std::is_reference_v<InnerRng >가 false인 경우에만 존재)
|
내부 범위의 캐시 (설명 전용 멤버 객체*) |
멤버 함수
join_with_view
를 생성합니다
(public member function) |
|
|
기본(적응된) 뷰의 복사본을 반환합니다
(public member function) |
|
|
시작 부분을 가리키는 반복자를 반환합니다
(public member function) |
|
|
끝 부분을 가리키는 반복자나 센티널을 반환합니다
(public member function) |
|
ranges::view_interface | |
|
empty파생된 뷰가 비어 있는지 여부를 반환합니다. 단, 파생된 뷰가 sized_range 또는 forward_range std::ranges::view_interface<D>를 만족하는 경우에만 제공됩니다. (
| |
cbegin |
(C++23) 범위의 시작을 가리키는 상수 반복자를 반환합니다. std::ranges::view_interface<D>(
|
cend |
(C++23) 범위의 상수 반복자에 대한 종점을 반환합니다. std::ranges::view_interface<D>(
|
|
operator bool파생된 뷰가 비어 있지 않은지 여부를 반환합니다. 단, ranges::empty 가 해당 뷰에 적용 가능한 경우에만 제공됩니다. ( std::ranges::view_interface<D>의 공개 멤버 함수)
| |
| 파생된 뷰의 첫 번째 요소를 반환합니다. 단, 파생된 뷰가 forward_range 를 만족하는 경우에 제공됩니다. ( std::ranges::view_interface<D>의 공개 멤버 함수)
| |
| 파생된 뷰의 마지막 요소를 반환합니다. 단, 파생된 뷰가 bidirectional_range와 common_range 를 만족하는 경우에만 제공됩니다. ( std::ranges::view_interface<D>의 공개 멤버 함수)
| |
추론 가이드
중첩 클래스
|
반복자 타입
( 설명 전용 멤버 클래스 템플릿* ) |
|
|
센티넬 타입
( 설명 전용 멤버 클래스 템플릿* ) |
참고 사항
| 기능 테스트 매크로 | 값 | 표준 | 기능 |
|---|---|---|---|
__cpp_lib_ranges_join_with
|
202202L
|
(C++23) |
std::ranges::join_with_view
|
예제
이 코드 실행
#include <iostream> #include <ranges> #include <string_view> #include <vector> int main() { using namespace std::literals; std::vector v{"This"sv, "is"sv, "a"sv, "test."sv}; auto joined = v | std::views::join_with(' '); for (auto c : joined) std::cout << c; std::cout << '\n'; }
출력:
This is a test.
결함 보고서
다음의 동작 변경 결함 보고서들은 이전에 발표된 C++ 표준에 소급 적용되었습니다.
| DR | 적용 대상 | 게시된 동작 | 올바른 동작 |
|---|---|---|---|
| LWG 4074 | C++23 |
join_with_view
제약 조건이 부족했음
|
제약 조건 업데이트 |
참고 항목
|
(C++20)
|
view
의 시퀀스를 평면화하여 얻은 시퀀스로 구성된
view
range
s
(클래스 템플릿) (range 어댑터 객체) |
적응된 뷰들의 연결로 구성된
view
(클래스 템플릿) (커스터마이제이션 포인트 객체) |