std::ranges:: views:: join, std::ranges:: join_view
|
헤더에 정의됨
<ranges>
|
||
|
template
<
ranges::
input_range
V
>
requires
ranges::
view
<
V
>
and
|
(1) | (C++20 이후) |
|
namespace
views
{
inline
constexpr
/* 지정되지 않음 */
join
=
/* 지정되지 않음 */
;
|
(2) | (C++20 이후) |
|
호출 시그니처
|
||
|
template
<
ranges::
viewable_range
R
>
requires
/* 아래 참조 */
|
(C++20 이후) | |
view
를 나타내는 범위 어댑터.
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) |
|
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
(클래스 템플릿) (커스터마이제이션 포인트 객체) |