Namespaces
Variants

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

С сайта ru.cppreference.net
 
 
Библиотека диапазонов
Адаптеры диапазонов
 
 
Определён в заголовке <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) Адаптер диапазона, представляющий представление, состоящее из последовательности, полученной уплощением представления диапазонов, при этом каждый элемент разделителя вставляется между элементами представления. Разделителем может быть отдельный элемент или представление элементов.
Для определения /*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, когда:

  • ranges::range_reference_t<V> является ссылкой, и
  • V и ranges::range_reference_t<V> каждое моделирует forward_range.

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

  • ranges::range_reference_t<V> является ссылкой,
  • V, ranges::range_reference_t<V>, и Pattern каждое моделирует bidirectional_range, и
  • ranges::range_reference_t<V> и Pattern каждое моделирует common_range.

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

  • ranges::range_reference_t<V> является ссылкой, и
  • V и ranges::range_reference_t<V> каждое моделирует forward_range и 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)
Унаследовано от 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>)

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

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

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

Примечания

Макрос тестирования возможностей Значение Стандарт Функция
__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 состоящее из конкатенации адаптированных представлений
(шаблон класса) (объект точки кастомизации)