Namespaces
Variants

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

cppreference.net에서
 
 
범위 라이브러리
범위 어댑터
 
 
헤더 <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 /* unspecified */ join = /* unspecified */;
}
(2) (C++20부터)
호출 시그니처
template< ranges::viewable_range R >
    requires /* see below */
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}expression-equivalente합니다.

join_view는 input_range를 만족합니다.

join_view는 다음 조건에서 forward_range를 만족합니다:

  • ranges::range_reference_t<V>가 참조 타입이고,
  • V와 ranges::range_reference_t<V> 각각이 forward_range를 만족하는 경우.

join_view는 다음 조건에서 bidirectional_range를 만족합니다:

join_view는 다음 조건에서 common_range를 만족합니다:

  • ranges::range_reference_t<V>가 참조 타입이고,
  • V와 ranges::range_reference_t<V> 각각이 forward_range와 common_range를 만족하는 경우.

멤버 함수

join_view 를 생성합니다
(public member function)
기본(적응된) 뷰의 복사본을 반환합니다
(public member function)
시작 부분을 가리키는 반복자를 반환합니다
(public member function)
끝 부분을 가리키는 반복자나 센티널을 반환합니다
(public member function)
ranges::view_interface
파생된 뷰가 비어 있는지 여부를 반환합니다. 단, 해당 뷰가 sized_range 또는 forward_range
를 만족하는 경우에만 제공됩니다.std::ranges::view_interface<D>의 공개 멤버 함수)
(C++23)
범위의 시작 부분에 대한 상수 반복자를 반환합니다.
(std::ranges::view_interface<D>의 공개 멤버 함수)
(C++23)
범위의 상수 반복자에 대한 센티널을 반환합니다.
(std::ranges::view_interface<D>의 공개 멤버 함수)
파생된 뷰가 비어 있지 않은지 여부를 반환합니다. 단, ranges::empty가 해당 뷰에 적용 가능한 경우에만 제공됩니다.
(std::ranges::view_interface<D>의 공개 멤버 함수)
파생된 뷰의 첫 번째 요소를 반환합니다. 단, 해당 뷰가 forward_range
를 만족하는 경우에 제공됩니다. (std::ranges::view_interface<D>의 공개 멤버 함수)
파생된 뷰의 마지막 요소를 반환합니다. 단, 해당 뷰가 bidirectional_range와 common_range
를 만족하는 경우에만 제공됩니다. (std::ranges::view_interface<D>의 공개 멤버 함수)

추론 가이드

중첩 클래스

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

참고 사항

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://ko.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
(클래스 템플릿) (커스터마이제이션 포인트 객체)