Namespaces
Variants

std::ranges::views::join_with, std::ranges::join_with_view

De es.cppreference.net
 
 
Biblioteca de rangos
Adaptadores de rangos
 
 
Definido en el encabezado <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) (desde C++23)
namespace views {
    inline constexpr /* unspecified */ join_with = /* unspecified */;
}
(2) (desde C++23)
Signatura de llamada
template< ranges::viewable_range R, class Pattern >
    requires /* see below */
constexpr ranges::view auto join_with( R&& r, Pattern&& pattern );
(desde C++23)
template< class Pattern >
constexpr /* range adaptor closure */ join_with( Pattern&& pattern );
(desde C++23)
1) Un adaptador de rango que representa una vista que consiste en la secuencia obtenida al aplanar una vista de rangos, con cada elemento del delimitador insertado entre los elementos de la vista. El delimitador puede ser un solo elemento o una vista de elementos.
Para la definición de /*concatable*/, consulte std::ranges::concat_view.
2) RangeAdaptorObject. La expresión views::join_with(e, f) es expression-equivalent a join_with_view(e, f) para cualquier subexpresión adecuada e y f.

join_with_view modela input_range.

join_with_view modela forward_range cuando:

  • ranges::range_reference_t<V> es una referencia, y
  • V y ranges::range_reference_t<V> modelan cada uno forward_range.

join_with_view modela bidirectional_range cuando:

  • ranges::range_reference_t<V> es una referencia,
  • V, ranges::range_reference_t<V>, y Pattern modelan cada uno bidirectional_range, y
  • ranges::range_reference_t<V> y Pattern modelan cada uno common_range.

join_with_view modela common_range cuando:

  • ranges::range_reference_t<V> es una referencia, y
  • V y ranges::range_reference_t<V> modelan cada uno forward_range y common_range.

Tipos anidados

Tipo Definición
InnerRng ranges:: range_reference_t < V >
( tipo miembro solo para exposición* )

Miembros de datos

Miembro Descripción
V base_ la vista subyacente (adaptada)
(objeto miembro de solo exposición*)
Pattern pattern_ el objeto patrón
(objeto miembro de solo exposición*)
non-propagating-cache <ranges::iterator_t<V>> outer_it_
(presente solo si V no modela forward_range)
la caché del iterador externo
(objeto miembro de solo exposición*)
non-propagating-cache <std::remove_cv_t<InnerRng >> inner_
(presente solo si std::is_reference_v<InnerRng > es false)
la caché del rango interno
(objeto miembro de solo exposición*)

Funciones miembro

construye un join_with_view
(función miembro pública)
devuelve una copia de la vista subyacente (adaptada)
(función miembro pública)
devuelve un iterador al inicio
(función miembro pública)
devuelve un iterador o un centinela al final
(función miembro pública)
Heredado de ranges::view_interface
devuelve si la vista derivada está vacía, proporcionado solo si satisface sized_range o forward_range
(función miembro pública de std::ranges::view_interface<D>)
(C++23)
devuelve un iterador constante al inicio del rango
(función miembro pública de std::ranges::view_interface<D>)
(C++23)
devuelve un centinela para el iterador constante del rango
(función miembro pública de std::ranges::view_interface<D>)
devuelve si la vista derivada no está vacía, proporcionado solo si ranges::empty es aplicable a ella
(función miembro pública de std::ranges::view_interface<D>)
devuelve el primer elemento en la vista derivada, proporcionado si satisface forward_range
(función miembro pública de std::ranges::view_interface<D>)
devuelve el último elemento en la vista derivada, proporcionado solo si satisface bidirectional_range y common_range
(función miembro pública de std::ranges::view_interface<D>)

Guías de deducción

Clases anidadas

el tipo de iterador
( clase de plantilla miembro solo para exposición* )
el tipo de centinela
( clase de plantilla miembro solo para exposición* )

Notas

Macro de prueba de características Valor Std Característica
__cpp_lib_ranges_join_with 202202L (C++23) std::ranges::join_with_view

Ejemplo

#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';
}

Salida:

This is a test.

Informes de defectos

Los siguientes informes de defectos que modifican el comportamiento se aplicaron retroactivamente a los estándares de C++ publicados anteriormente.

DR Aplicado a Comportamiento publicado Comportamiento correcto
LWG 4074 C++23 join_with_view estaba sub-restringido actualizadas las restricciones

Véase también

una view que consiste en la secuencia obtenida al aplanar una view de range s
(plantilla de clase) (objeto adaptador de rango)
una view que consiste en la concatenación de las vistas adaptadas
(plantilla de clase) (objeto punto de personalización)