Namespaces
Variants

std::ranges:: views:: join, std::ranges:: join_view

From cppreference.net
Ranges library
Range adaptors
헤더에 정의됨 <ranges>
template < ranges:: input_range V >

requires ranges:: view < V > and
ranges:: input_range < ranges:: range_reference_t < V >>
class join_view

: public ranges:: view_interface < join_view < V >>
(1) (C++20 이후)
namespace views {

inline constexpr /* 지정되지 않음 */ join = /* 지정되지 않음 */ ;

}
(2) (C++20 이후)
호출 시그니처
template < ranges:: viewable_range R >

requires /* 아래 참조 */

constexpr ranges:: view auto join ( R && r ) ;
(C++20 이후)
1) 범위의 뷰를 평탄화하여 얻은 시퀀스로 구성된 view 를 나타내는 범위 어댑터.
2) RangeAdaptorObject (그리고 또한 RangeAdaptorClosureObject ). 표현식 views :: join ( e ) 표현식 동등 합니다 join_view < views:: all_t < decltype ( ( e ) ) >> { e } 에 대해, 모든 적합한 하위 표현식 e .

join_view input_range 를 모델링합니다.

join_view 는 다음 경우에 forward_range 를 모델링합니다:

join_view 는 다음 조건에서 bidirectional_range 를 모델링합니다:

join_view 는 다음 조건에서 common_range 를 모델링합니다:

목차

멤버 함수

join_view 를 생성합니다
(public member function)
기본(적응된) 뷰의 복사본을 반환합니다
(public member function)
시작 부분을 가리키는 반복자를 반환합니다
(public member function)
끝 부분을 가리키는 반복자나 센티널을 반환합니다
(public 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)
파생 뷰의 마지막 요소를 반환합니다. bidirectional_range common_range 를 만족할 때만 제공됩니다
( std::ranges::view_interface<D> 의 public member function)

추론 가이드

중첩 클래스

반복자 타입
( 설명 전용 멤버 클래스 템플릿* )
센티넬 타입
( 설명 전용 멤버 클래스 템플릿* )

참고 사항

P2328R1 이 채택되기 전에는, 내부 범위 타입( ranges:: range_reference_t < V > )이 컨테이너 타입일 수 없었습니다(단, 컨테이너에 대한 참조는 가능했습니다). 예를 들어, std::string prvalue의 transform_view 를 join하는 것은 허용되지 않았습니다.

struct Person { int age; std::string name; };
auto f(std::vector<Person>& v) {
//  return v | std::views::transform([](auto& p){ return p.name; })
//           | std::views::join; // P2328R1 이전에는 오류
    return v | std::views::transform([](auto& p) -> std::string& { return p.name; })
             | std::views::join; // 정상
}

예제

#include <iostream>
#include <ranges>
#include <string_view>
#include <vector>
int main()
{
    using namespace std::literals;
    const auto bits = {"https:"sv, "//"sv, "cppreference"sv, "."sv, "com"sv};
    for (char const c : bits | std::views::join)
        std::cout << c;
    std::cout << '\n';
    const std::vector<std::vector<int>> v{{1, 2}, {3, 4, 5}, {6}, {7, 8, 9}};
    auto jv = std::ranges::join_view(v);
    for (int const e : jv)
        std::cout << e << ' ';
    std::cout << '\n';
}

출력:

https://cppreference.net
1 2 3 4 5 6 7 8 9

결함 보고서

다음 동작 변경 결함 보고서는 이전에 발표된 C++ 표준에 소급 적용되었습니다.

DR 적용 대상 게시된 동작 수정된 동작
LWG 3474 C++20 views :: join ( e ) e join_view 일 때 e 의 복사본을 반환함 중첩된 join_view 를 반환함
P2328R1 C++20 비-뷰(non-view) range prvalue를 join_view 로 결합할 수 없었음 결합 가능하도록 수정됨

참고 항목

범위의 뷰를 평탄화하여 얻은 시퀀스로 구성된 view 로, 요소 사이에 구분자가 있음
(클래스 템플릿) (범위 어댑터 객체)
적응된 뷰들의 연결로 구성된 view
(클래스 템플릿) (커스터마이제이션 포인트 객체)