Spec-Zone.ru › C++

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

Определено в заголовке <ranges>
template< ranges::input_range V, ranges::forward_range Pattern >
    requires ranges::view<V> and
             ranges::input_range<ranges::range_reference_t<V>> and
             ranges::view<Pattern> and
             /* ranges::range_reference_t<V> and Pattern
                have compatible elements (see below) */
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, состоящий из последовательности, полученной путем сглаживания представления диапазонов, с вставкой каждого элемента разделителя между элементами представления. Разделитель может быть единственным элементом или представлением элементов.
2) RangeAdaptorObject. Выражение views::join_with(e, f) эквивалентно выражению join_with_view(e, f) для любых подходящих подвыражений e и f.

ranges::range_reference_t<V> и Pattern совместимы по элементам, если все из следующих концепций реализованы:

  • std::common_with<ranges::range_value_t<ranges::range_reference_t<V>>,
    ranges::range_value_t<Pattern>>
  • std::common_reference_with<ranges::range_reference_t<ranges::range_reference_t<V>>,
    ranges::range_reference_t<Pattern>>
  • std::common_reference_with<ranges::range_rvalue_reference_t<ranges::range_reference_t<V>>,
    ranges::range_rvalue_reference_t<Pattern>>

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.

Члены-функции

(конструктор)
(C++23)
создает join_with_view
(публичная функция-член)
base
(C++23)
возвращает копию базового (адаптированного) представления
(публичная функция-член)
begin
(C++23)
возвращает итератор начала
(публичная функция-член)
end
(C++23)
возвращает итератор или ограничивающий итератор конца
(публичная функция-член)
Унаследованное от std::ranges::view_interface
empty
(C++20)
возвращает, является ли производное представление пустым. Предоставляется, если оно удовлетворяет sized_range или forward_range.
(публичная функция-член std::ranges::view_interface<D>)
cbegin
(C++23)
возвращает постоянный итератор начала диапазона.
(публичная функция-член std::ranges::view_interface<D>)
cend
(C++23)
возвращает ограничивающий итератор конца диапазона.
(публичная функция-член std::ranges::view_interface<D>)
operator bool
(C++20)
возвращает, не пусто ли производное представление. Предоставляется, если ranges::empty применимо к нему.
(публичная функция-член std::ranges::view_interface<D>)
front
(C++20)
возвращает первый элемент производного представления. Предоставляется, если оно удовлетворяет forward_range.
(публичная функция-член std::ranges::view_interface<D>)
back
(C++20)
возвращает последний элемент производного представления. Предоставляется, если оно удовлетворяет bidirectional_range и common_range.
(публичная функция-член std::ranges::view_interface<D>)

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

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

iterator
(C++23)
тип итератора
(член-шаблон класса exposition-only*)
sentinel
(C++23)
тип ограничителя
(член-шаблон класса exposition-only*)

Пример

#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.

См. также

ranges::join_viewviews::join
(C++20)
a view consisting of the sequence obtained from flattening a view of ranges
(шаблон класса) (объект адаптера диапазонов)

© cppreference.com
Licensed under the Creative Commons Attribution-ShareAlike Unported License v3.0.
https://en.cppreference.com/w/cpp/ranges/join_with_view

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API