Namespaces
Variants

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

From cppreference.net
Ranges library
Range adaptors
template < bool Const >
class /*iterator*/
(1) ( solo para exposición* )
Conceptos auxiliares
template < bool Const, class ... Rs >
concept /*concat-is-random-access*/ = /* ver descripción */ ;
(2) ( solo para exposición* )
template < bool Const, class ... Rs >
concept /*concat-is-bidirectional*/ = /* ver descripción */ ;
(3) ( solo para 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 paquete que consiste en todos los elementos de Rs excepto el último elemento. Equivalente a

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

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

template < bool Const, class ... Rs >
concept concat-is-bidirectional = // solo para exposición
all-bidirectional  < Const, Rs... > &&
( ranges:: common_range < maybe-const  < Const, Fs >> && ... ) ;

.

Contenidos

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 Definició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]