Espacios de nombres
Variantes

std::ranges::subrange

De cppreference.com
 
 
Biblioteca de rangos
Adaptadores de rangos
 
std::ranges::subrange
Funciones miembro
Observadores
Operaciones de iteradores
Guías de deducción
Funciones no miembro
(C++20)
Tipos auxiliares
(C++20)
 
<tbody> </tbody>
Definido en el archivo de encabezado <ranges>
template< std::input_or_output_iterator I, std::sentinel_for<I> S = I, ranges::subrange_kind K = std::sized_sentinel_for<S, I> ? ranges::subrange_kind::sized : ranges::subrange_kind::unsized > requires (K == ranges::subrange_kind::sized || !std::sized_sentinel_for<S, I>) class subrange : public ranges::view_interface<subrange<I, S, K>>
(desde C++20)

La plantilla de clase subrange combina juntos un iterador y un centinela en una sola vista (view).

Además, el subrango es un sized_range siempre que el parámetro de plantilla final sea subrange_kind::size (lo que sucede cuando std::sized_sentinel_for<S, I> está satisfecho o cuando el tamaño se pasa explícitamente como un argumento del constructor). El registro de tamaño debe almacenarse si y solo si std::sized_sentinel_for<S, I> es false y K es subrange_kind::sized.

Funciones miembro

Crea un nuevo subrango.
(función miembro pública)
Convierte el subrango a un tipo similar a un par.
(función miembro pública)
Observadores
(C++20)
Obtiene el iterador.
(función miembro pública) [editar]
(C++20)
Obtiene el centinela.
(función miembro pública) [editar]
(C++20)
Verifica si el subrango (subrange) está vacío.
(función miembro pública) [editar]
(C++20)
Obtiene el tamaño del subrango (subrange).
(función miembro pública) [editar]
Operaciones de iteradores
(C++20)
Avanza el iterador en una distancia dada.
(función miembro pública) [editar]
(C++20)
Obtiene una copia del subrango (subrange) con su iterador decrementado en una distancia dada.
(función miembro pública) [editar]
(C++20)
Obtiene una copia del subrango (subrange) con su iterador avanzado en una distancia dada.
(función miembro pública) [editar]
Heredadas de ranges::view_interface
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)
Obtiene la dirección de los datos de una vista derivada. Se proporciona si su tipo iterador satisface contiguous_iterator.
(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]
Devuelve el enésimo elemento en la vista derivada. Se proporciona si la vista derivada satisface random_access_range.
(función miembro pública de std::ranges::view_interface<D>) [editar]

Guías de deducción

Funciones no miembro

Obtiene un iterador o centinela de un subrango (std::ranges::subrange).
(plantilla de función) [editar]

Tipos auxiliares

Especifica si un subrango (std::ranges::subrange) modela std::ranges::sized_range.
(enum) [editar]
Obtiene el número de componentes de un subrango (std::ranges::subrange).
(especialización de plantilla de clase) [editar]
Obtiene el tipo del iterador o el centinela de un subrango (std::ranges::subrange).
(especialización de plantilla de clase) [editar]

Plantillas auxiliares

<tbody> </tbody>
template<class I, class S, ranges::subrange_kind K> inline constexpr bool enable_borrowed_range<ranges::subrange<I, S, K>> = true;

Esta especialización de std::ranges::enable_borrowed_range hace que subrange satisfaga borrowed_range.

Ejemplo

#include <iostream>
#include <map>
#include <ranges>
#include <string_view>

template <class V> void mutar(V& v) { v += 'A' - 'a'; }

template <class K, class V>
void mutar_valores_de_mapa(std::multimap<K, V>& m, K k) {
    auto [primero, ultimo] = m.equal_range(k);
    for (auto& [_, v] : std::ranges::subrange(primero, ultimo)) {
        mutar(v);
    }
}

int main()
{
    auto imprimir = [](std::string_view comentario, auto const& mm) {
        std::cout << comentario << "{ ";
        for (const auto& [k, v] : mm) std::cout << "{" << k << ",'" << v << "'} ";
        std::cout << "}\n";
    };

    std::multimap<int,char> mm{ {4,'a'}, {3,'-'}, {4,'b'}, {5,'-'}, {4,'c'} };
    imprimir("Antes: ", mm);
    mutar_valores_de_mapa(mm, 4);
    imprimir("Después:  ", mm);
}

Salida:

Antes: { {3,'-'} {4,'a'} {4,'b'} {4,'c'} {5,'-'} }
Después:  { {3,'-'} {4,'A'} {4,'B'} {4,'C'} {5,'-'} }

Véase también

Plantilla de clase auxiliar para definir una vista (view), usando el patrón de plantilla curiosamente recurrente (CRTP).
(plantilla de clase) [editar]