Spec-Zone.ru › C++

std::ranges::views::join, std::ranges::join_view

Определено в заголовке <ranges>
template< ranges::input_range V >
    requires ranges::view<V> and
             ranges::input_range<ranges::range_reference_t<V>>
class join_view
    : public ranges::view_interface<join_view<V>>
(1) (с C++20)
namespace views {
    inline constexpr /* unspecified */ join = /* unspecified */;
}
(2) (с C++20)
1) Адаптер диапазонов, представляющий view, состоящий из последовательности, полученной путем сглаживания представления диапазонов.
2) RangeAdaptorObject (и также RangeAdaptorClosureObject). Выражение views::join(e) эквивалентно выражению join_view<views::all_t<decltype((e))>>{e} для любых подходящих подвыражений e.

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

(конструктор)
(C++20)
создаёт join_view
(публичная член-функция)
base
(C++20)
возвращает копию базового (адаптированного) представления
(публичная член-функция)
begin
(C++20)
возвращает итератор начала
(публичная член-функция)
end
(C++20)
возвращает итератор или ограничивающий элемент конца
(публичная член-функция)
Наследуется от 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++20)
тип итератора
(иллюстративное член-шаблон класса*)
sentinel
(C++20)
тип ограничивающего элемента
(иллюстративное член-шаблон класса*)

Примечания

До принятия P2328R1, внутренний тип диапазона (ranges::range_reference_t<V>) не мог быть типом контейнера (но мог быть ссылкой на контейнер). Например, не разрешалось соединять transform_view std::string.

struct Person { int age; std::string name; };
 
auto f(std::vector<Person>& v) {
//  return v | std::views::transform([](auto& p){ return p.name; })
//           | std::views::join; // error before P2328R1
    return v | std::views::transform([](auto& p) -> std::string& { return p.name; })
             | std::views::join; // OK
}

Пример

#include <iostream>
#include <ranges>
#include <string_view>
#include <vector>
 
int main()
{
    using namespace std::literals;
 
    const auto bits = {"https:"sv, "//"sv, "cppreference"sv, "."sv, "com"sv};
    for (char const c : bits | std::views::join)
        std::cout << c;
    std::cout << '\n';
 
    const std::vector<std::vector<int>> v{{1, 2}, {3, 4, 5}, {6}, {7, 8, 9}};
    auto jv = std::ranges::join_view(v);
    for (int const e : jv)
        std::cout << e << ' ';
    std::cout << '\n';
}

Вывод:

https://cppreference.com
1 2 3 4 5 6 7 8 9

Отчеты о дефектах

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

DR Применимо к Поведение, как опубликовано Правильное поведение
LWG 3474 C++20 views::join(e) возвращало копию e, когда e является join_view возвращает вложенный join_view
P2328R1 C++20 значения prvalue диапазонов, не являющихся представлениями, не могли быть объединены с помощью join_view объединение стало возможным

См. также

ranges::join_with_viewviews::join_with
(C++23)
представление, состоящее из последовательности, полученной путем сглаживания представления диапазонов с разделителем между элементами
(шаблон класса) (объект адаптера диапазонов)
ranges::split_viewviews::split
(C++20)
представление над поддиапазонами, полученными путем разделения другого представления с помощью разделителя
(шаблон класса) (объект адаптера диапазонов)
ranges::lazy_split_viewviews::lazy_split
(C++20)
представление над поддиапазонами, полученными путем разделения другого представления с помощью разделителя
(шаблон класса) (объект адаптера диапазонов)

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

Spec-Zone.ru

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