Namespaces
Variants

std::ranges::concat_view<Views...>::iterator

De es.cppreference.net
 
 
Biblioteca de rangos
Adaptadores de rango
 
 
template< bool Const >
class /*iterator*/
(1) (solo exposición*)
Conceptos auxiliares
template< bool Const, class... Rs >
concept /*concat-is-random-access*/ = /* see description */;
(2) (solo exposición*)
template< bool Const, class... Rs >
concept /*concat-is-bidirectional*/ = /* see description */;
(3) (solo exposición*)
1) ranges::concat_view<Views...>::iterator es el tipo de los iteradores devueltos por begin() y end() de ranges::concat_view<Views...>.
2) Sea Fs el pack que consiste de todos los elementos de Rs excepto el último elemento. Equivalente a

template<bool Const, class... Rs>
concept concat-is-random-access = // exposition only
    all-random-access <Const, Rs...> &&
    (ranges::common_range<maybe-const <Const, Fs>> && ...);

.
3) Sea Fs el pack que consiste de todos los elementos de Rs excepto el último elemento. Equivalente a

template<bool Const, class... Rs>
concept concat-is-bidirectional = // exposition only
    all-bidirectional <Const, Rs...> &&
    (ranges::common_range<maybe-const <Const, Fs>> && ...);

.

Parámetros de plantilla

Const - si el iterador es un iterador constante

Tipos anidados

Tipos solo de exposición
Tipo Definición
base-iter std:: variant < ranges:: iterator_t < maybe-const  < Const, Views >> ... >
( tipo miembro solo de exposición* )
Tipos de propiedades del iterador
Tipo Definición
iterator_concept una etiqueta de iterador , ver más abajo
iterator_category
(condicionalmente presente)
una etiqueta de iterador, ver más abajo
value_type concat-value-t  < maybe-const  < Const, Views > ... >
difference_type

std:: common_type_t < ranges:: range_difference_t < maybe-const  < Const, Views >> ... >

Determinando el concepto de iterador

iterator_concept se define de la siguiente manera:

Determinando la categoría del iterador

iterator_category se define si y solo si all-forward  < Const, Views... > se modela. En este caso, se define de la siguiente manera:

Miembros de datos

Miembro Descripción
maybe-const <Const, ranges::concat_view>* parent_ un puntero al padre concat_view
(objeto miembro* solo para exposición)
base-iter it_ un iterador en la vista actual
(objeto miembro* solo para exposición)

Funciones miembro

construye un iterador
(función miembro pública)
accede al elemento
(función miembro pública)
accede a un elemento por índice
(función miembro pública)
avanza o decrementa el iterador subyacente
(función miembro pública)
Plantillas de función solo para exposición
reemplaza it_ con el inicio de la siguiente vista, si it_ es el final de la vista actual
( función miembro solo para exposición* )
decrementa it_ de modo que apunte a la posición anterior
( función miembro solo para exposición* )
avanza la posición actual en el desplazamiento dado
( función miembro solo para exposición* )
decrementa la posición actual en el valor dado
( función miembro solo para exposición* )

Funciones no miembro

compara los iteradores subyacentes
(función)
realiza aritmética de iteradores
(función)
(C++26)
convierte el resultado de desreferenciar el iterador subyacente a su tipo de referencia de valor asociado
(función)
(C++26)
intercambia los objetos apuntados por dos iteradores subyacentes
(función)

Ejemplo

La versión preliminar se puede consultar en Compiler Explorer .

#include <iostream>
#include <iterator>
#include <ranges>
int main()
{
    namespace views = std::views;
    static constexpr int p[]{1, 2, 3};
    static constexpr auto e = {4, 5};
    auto t = views::iota(6, 9);
    auto cat = views::concat(p, e, t);
    auto dog = views::concat(cat, cat);
    for (auto i{dog.begin()}; i != std::default_sentinel; ++i)
        std::cout << *i << ' ';
    std::cout << '\n';
}

Salida:

1 2 3 4 5 6 7 8 1 2 3 4 5 6 7 8

Referencias

  • Estándar C++26 (ISO/IEC 14882:2026):
  • 26.7.18.3 Plantilla de clase concat_view::iterator [range.concat.iterator]