Namespaces
Variants

std::ranges:: views:: join_with, std::ranges:: join_with_view

From cppreference.net
Ranges library
Range adaptors
Определено в заголовочном файле <ranges>
template < ranges:: input_range V, ranges:: forward_range Pattern >

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 :

ranges:: view_interface < join_with_view < V, Pattern >>
(1) (начиная с C++23)
namespace views {

inline constexpr /* unspecified */ join_with = /* unspecified */ ;

}
(2) (начиная с C++23)
Сигнатура вызова
template < ranges:: viewable_range R, class Pattern >

requires /* see below */

constexpr ranges:: view auto join_with ( R && r, Pattern && pattern ) ;
(начиная с C++23)
template < class Pattern >
constexpr /* range adaptor closure */ join_with ( Pattern && pattern ) ;
(начиная с C++23)
1) Адаптер диапазона, представляющий view состоящий из последовательности, полученной путем выравнивания представления диапазонов, с каждым элементом разделителя, вставленным между элементами представления. Разделитель может быть одиночным элементом или представлением элементов.
Для определения /*concatable*/ , см. std::ranges::concat_view .
2) RangeAdaptorObject . Выражение views :: join_with ( e, f ) является эквивалентным выражением для join_with_view ( e, f ) для любых подходящих подвыражений e и f .

join_with_view моделирует input_range .

join_with_view моделирует forward_range когда:

join_with_view моделирует bidirectional_range когда:

join_with_view моделирует common_range когда:

Содержание

Вложенные типы

Тип Определение
InnerRng ranges:: range_reference_t < V >
( тип-член только для демонстрации* )

Члены данных

Член Определение
V base_ базовое (адаптированное) представление
( объект-член только для демонстрации* )
Pattern pattern_ объект шаблона
( объект-член только для демонстрации* )
non-propagating-cache  < ranges:: iterator_t < V >> outer_it_
(присутствует только если V не моделирует forward_range )
кэш внешнего итератора
( объект-член только для демонстрации* )
non-propagating-cache  < std:: remove_cv_t < InnerRng  >> inner_
(присутствует только если std:: is_reference_v < InnerRng  > равно false )
кэш внутреннего диапазона
( объект-член только для демонстрации* )

Функции-члены

создаёт join_with_view
(public member function)
возвращает копию базового (адаптированного) представления
(public member function)
возвращает итератор на начало
(public member function)
возвращает итератор или страж на конец
(public member function)
Унаследовано от std::ranges::view_interface
возвращает, является ли производное представление пустым, предоставляется только если оно удовлетворяет sized_range или forward_range
(public member function of std::ranges::view_interface<D> )
(C++23)
возвращает константный итератор на начало диапазона
(public member function of std::ranges::view_interface<D> )
(C++23)
возвращает страж для константного итератора диапазона
(public member function of std::ranges::view_interface<D> )
возвращает, является ли производное представление непустым, предоставляется только если ranges::empty применимо к нему
(public member function of std::ranges::view_interface<D> )
возвращает первый элемент в производном представлении, предоставляется если оно удовлетворяет forward_range
(public member function of std::ranges::view_interface<D> )
возвращает последний элемент в производном представлении, предоставляется только если оно удовлетворяет bidirectional_range и common_range
(public member function of std::ranges::view_interface<D> )

Руководства по выводу

Вложенные классы

тип итератора
( демонстрационный шаблон класса-члена* )
тип сторожа
( демонстрационный шаблон класса-члена* )

Примечания

Макрос тестирования возможностей Значение Стандарт Функция
__cpp_lib_ranges_join_with 202202L (C++23) std::ranges::join_with_view

Пример

#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';
}

Вывод:

This is a test.

Отчеты о дефектах

Следующие отчеты об изменениях в поведении, содержащие описания дефектов, были применены ретроактивно к ранее опубликованным стандартам C++.

DR Applied to Behavior as published Correct behavior
LWG 4074 C++23 join_with_view был недостаточно ограничен обновлены ограничения

Смотрите также

представление, view состоящее из последовательности, полученной путём выравнивания view из range s
(шаблон класса) (объект адаптера диапазона)
представление, view состоящее из конкатенации адаптированных представлений
(шаблон класса) (объект точки кастомизации)