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 (открытая функция-член) |
|
| возвращает копию базового (адаптированного) представления (открытая функция-член) |
|
| возвращает итератор на начало (открытая функция-член) |
|
| возвращает итератор или сентинел на конец (открытая функция-член) |
|
Унаследовано от |
|
возвращает, является ли производное представление пустым; доступна только если оно удовлетворяет 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 <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 имел недостаточно ограничений | ограничения обновлены |
См. также
|
(C++20) | view, состоящее из последовательности, полученной путём уплощения view из ranges(шаблон класса) (объект-адаптер диапазона) |
|
(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