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