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
-  Vand 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>, andPatterneach modelsbidirectional_range, and
-  ranges::range_reference_t <V> and Patterneach modelcommon_range.
join_with_view models common_range when:
- ranges::range_reference_t <V> is a reference, and
-  Vand ranges::range_reference_t <V> each modelforward_rangeandcommon_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_viewwas underconstrained | updated the constraints | 
[edit] See also
(C++20)
view consisting of the sequence obtained from flattening a view of ranges (class template) (range adaptor object)[edit]