std::ranges::views::join_with, std::ranges::join_with_view
From cppreference.com
C++
Feature test macros (C++20)
Concepts library (C++20)
Metaprogramming library (C++11)
Ranges library (C++20)
Filesystem library (C++17)
Concurrency support library (C++11)
Execution control library (C++26)
Ranges library
(exposition-only member object*)
(exposition-only member object*)
(present only if
(exposition-only member object*)
(present only if std::is_reference_v <
(exposition-only member object*)
returns a constant iterator to the beginning of the range
(public member function of
returns a sentinel for the constant iterator of the range
(public member function of
a
(class template) (range adaptor object)[edit]
(C++23)(C++23)
(C++23)(C++23)
(C++23)(C++23)
(C++26)(C++26)
join_with_viewviews::join_with
(C++23)(C++23)
(C++26)(C++26)
(C++26)(C++26)
(C++23)(C++23)
(C++23)(C++23)
(C++23)(C++23)
(C++23)(C++23)
(C++23)(C++23)
(C++23)
(C++23)(C++23)
(C++23)
(C++23)(C++23)
(C++23)(C++23)
(C++23)(C++23)
(C++23)(C++23)
(C++23)(C++23)
(C++23)
std::ranges::join_with_view
Defined in header
<ranges>
template< ranges::input_range V, ranges::forward_range Pattern >
(1)
(since C++23)
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 :
namespace views {
(2)
(since C++23)
inline constexpr /* unspecified */ join_with = /* unspecified */;
Call signature
template< ranges::viewable_range R, class Pattern >
(since C++23)
requires /* see below */
template< class Pattern >
constexpr /* range adaptor closure */ join_with( Pattern&& pattern );
(since C++23)
constexpr /* range adaptor closure */ join_with( Pattern&& pattern );
1) A range adaptor that represents
view
consisting of the sequence obtained from flattening a view of ranges, with every element of the delimiter inserted in between elements of the view. The delimiter can be a single element or a view of elements. For the definition of /*concatable*/, see std::ranges::concat_view.
2) RangeAdaptorObject. The expression views::join_with(e, f) is expression-equivalent to join_with_view(e, f) for any suitable subexpressions e and f.
join_with_view
models input_range
.
join_with_view
models forward_range
when:
- ranges::range_reference_t <V> is a reference, and
-
V
and ranges::range_reference_t <V> each modelforward_range
.
join_with_view
models bidirectional_range
when:
- ranges::range_reference_t <V> is a reference,
-
V
, ranges::range_reference_t <V>, andPattern
each modelsbidirectional_range
, and - ranges::range_reference_t <V> and
Pattern
each modelcommon_range
.
join_with_view
models common_range
when:
- ranges::range_reference_t <V> is a reference, and
-
V
and ranges::range_reference_t <V> each modelforward_range
andcommon_range
.
Contents
[edit] Nested types
Type
Definition
[edit] Data members
Member
Definition
V
base_
the underlying (adapted) view(exposition-only member object*)
Pattern
pattern_
the pattern object(exposition-only member object*)
non-propagating-cache
<ranges::iterator_t <V>> outer_it_
(present only if
V
does not model forward_range
)
the cache of the outer iterator(exposition-only member object*)
non-propagating-cache
<std::remove_cv_t <InnerRng
>> inner_
(present only if std::is_reference_v <
InnerRng
> is false)
the cache of the inner range(exposition-only member object*)
[edit] Member functions
Inherited from std::ranges::view_interface
returns whether the derived view is empty, provided only if it satisfies
(public member function of
sized_range
or forward_range
(public member function of
std::ranges::view_interface<D>
) [edit]
(C++23)
(public member function of
std::ranges::view_interface<D>
) [edit]
(C++23)
(public member function of
std::ranges::view_interface<D>
) [edit]
returns whether the derived view is not empty, provided only if ranges::empty is applicable to it
(public member function of
(public member function of
std::ranges::view_interface<D>
) [edit]
returns the first element in the derived view, provided if it satisfies
(public member function of
forward_range
(public member function of
std::ranges::view_interface<D>
) [edit]
returns the last element in the derived view, provided only if it satisfies
(public member function of
bidirectional_range
and common_range
(public member function of
std::ranges::view_interface<D>
) [edit]
[edit] Deduction guides
[edit] Nested classes
[edit] Notes
Feature-test macro | Value | Std | Feature |
---|---|---|---|
__cpp_lib_ranges_join_with |
202202L |
(C++23) | std::ranges::join_with_view
|
[edit] Example
Run this code
#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'; }
Output:
This is a test.
[edit] Defect reports
The following behavior-changing defect reports were applied retroactively to previously published C++ standards.
DR | Applied to | Behavior as published | Correct behavior |
---|---|---|---|
LWG 4074 | C++23 | join_with_view was underconstrained
|
updated the constraints |
[edit] See also
(C++20)
view
consisting of the sequence obtained from flattening a view
of range
s (class template) (range adaptor object)[edit]