◐ Shell
clean mode source ↗

std::ranges::views::join, std::ranges::join_view - cppreference.com

De cppreference.com

Definido en el archivo de encabezado <ranges>

template< ranges::input_range V > requires ranges::view<V> && ranges::input_range<ranges::range_reference_t<V>> class join_view : public ranges::view_interface<join_view<V>>

(1) (desde C++20)

namespace views { inline constexpr /* no especificado */ join = /* no especificado */; }

(2) (desde C++20)

1) Un adaptador de rango que representa una vista (view) que consiste en la secuencia obtenida del aplanamiento de una vista de rangos.

2) Objeto adaptador de rango. La expresión views::join(e) es equivalente en expresión a join_view<views::all_t<decltype((e))>>{e} para cualquier subexpresión e adecuada.

Equivalente en expresión

La expresión e es equivalente-en-expresión a la expresión f, si e y f tienen los mismos efectos, ambas potencialmente lanzan o ambas potencialmente no lanzan (es decir, noexcept (e) == noexcept(f)), y ambas son subexpresiones constantes o ambas no son subexpresiones constantes.

Funciones miembro

Construye un objeto join_view
(función miembro pública) [editar]

(C++20)

Devuelve una copia de la vista (adaptada) subyacente.
(función miembro pública) [editar]

(C++20)

Devuelve un iterador al comienzo.
(función miembro pública) [editar]

(C++20)

Devuelve un iterador o un centinela al final.
(función miembro pública) [editar]
Heredadas de ranges::view_interface

(C++20)

Devuelve si la vista derivada está vacía o no. Se proporciona si la vista derivada satisface forward_range.
(función miembro pública de std::ranges::view_interface<D>) [editar]
Devuelve si la vista derivada está vacía o no. Se proporciona si ranges::empty le es aplicable.
(función miembro pública de std::ranges::view_interface<D>) [editar]

(C++20)

Devuelve el primer elemento en la vista derivada. Se proporciona si la vista derivada satisface forward_range.
(función miembro pública de std::ranges::view_interface<D>) [editar]

(C++20)

Devuelve el último elemento en una vista derivada. Se proporciona si la vista derivada satisface bidirectional_range y common_range.
(función miembro pública de std::ranges::view_interface<D>) [editar]

Guías de deducción

Clases anidadas

the iterator type
(plantilla de clase miembro de solo exposición)
the sentinel type
(plantilla de clase miembro de solo exposición)

Notas

Antes de que se adoptara P2328R1, el tipo de rango interno (ranges::range_reference_t<V>) no podía ser un tipo de contenedor (pero podía ser una referencia a un contenedor). Por ejemplo, no se admitía unir una vista transform_view de pr-valor std::string.

struct Persona { int edad; std::string nombre; };
auto f(std::vector<Persona>& v) {
 // return v | std::views::transform([](auto& p) { return p.nombre; })
 //          | std::views::join; // ERROR antes de P2328R1
    return v | std::views::transform([](auto& p) -> std::string& { return p.nombre; })
             | std::views::join; // de acuerdo
}

Ejemplo

#include <iostream>
#include <ranges>
#include <string_view>
#include <vector>

int main()
{
    using namespace std::literals;
    const auto bits = { "https:"sv, "//"sv, "es"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';
}

Salida:

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

Informes de defectos

Los siguientes informes de defectos de cambio de comportamiento se aplicaron de manera retroactiva a los estándares de C++ publicados anteriormente.

ID Aplicado a Comportamiento según lo publicado Comportamiento correcto
LWG 3474 C++20 views::join(e) devuelve una copia de e cuando e es una vista join_view. Devuelve una vista join_view anidada.
P2328R1 C++20 Los pr-valores que no son rangos (range) no pueden unirse mediante join_view. Se hicieron unibles.

Véase también