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를 만족합니다:
ranges::range_reference_t<V>가 참조 타입이고,V가 bidirectional_range를 만족하며,ranges::range_reference_t<V>가 bidirectional_range와 common_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
(클래스 템플릿) (커스터마이제이션 포인트 객체) |