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> &&
           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, если:

  • 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
(открытая функция-член)
base
возвращает копию базового (адаптированного) представления
(открытая функция-член)
begin
возвращает итератор на начало
(открытая функция-член)
end
возвращает итератор или сентинел на конец
(открытая функция-член)
Унаследовано от std::ranges::view_interface
empty
возвращает, является ли производное представление пустым; доступна только если оно удовлетворяет 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
возвращает, не является ли производное представление пустым; доступна только если к нему применим ranges::empty
(открытая функция-член std::ranges::view_interface<D>)
front
возвращает первый элемент производного представления; доступна, если оно удовлетворяет forward_range
(открытая функция-член std::ranges::view_interface<D>)
back
возвращает последний элемент производного представления; доступна только если оно удовлетворяет bidirectional_range и common_range
(открытая функция-член std::ranges::view_interface<D>)

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

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

iterator
тип итератора
(шаблон класса-члена, используемый только для описания*)
sentinel
тип сентинела
(шаблон класса-члена, используемый только для описания*)

Примечания

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

Пример

#include <print>
#include <ranges>
#include <string_view>
#include <list>

int main()
{
    std::list<std::string_view> v{"_", "cpp", "lib", "ranges", "join", "with"};
    std::println("{:s}", v | std::views::join_with('_'));
}

Вывод:

__cpp_lib_ranges_join_with

Отчёты об ошибках

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

Отчёт об ошибке Применяется к Опубликованное поведение Исправленное поведение
LWG 4074 C++23 join_with_view имел недостаточно ограничений ограничения обновлены

См. также

ranges::join_viewviews::join
(C++20)
view, состоящее из последовательности, полученной путём уплощения view из ranges
(шаблон класса) (объект-адаптер диапазона)
ranges::concat_viewviews::concat
(C++26)
view, состоящее из конкатенации адаптированных представлений
(шаблон класса) (объект точки настройки)

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

Spec-Zone.ru

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