Namespaces
Variants

std::ranges::subrange<I,S,K>::advance

De es.cppreference.net
 
 
Biblioteca de rangos
Adaptadores de rangos
 
 
constexpr subrange& advance( std::iter_difference_t<I> n );
(desde C++20)

Incrementa o decrementa begin_ :

Equivalente a: ranges::advance(begin_ , n);
if constexpr (StoreSize )
    size_ += to-unsigned-like (-n);
return *this;
.
  • En caso contrario, incrementa begin_ en n elementos, o hasta que se alcanza end_.
Equivalente a: auto d = n - ranges::advance(begin_ , n, end_ );
if constexpr (StoreSize )
    size_ -= to-unsigned-like (d);
return *this;
.


De acuerdo con las precondiciones de ranges::advance, si n < 0 es true y begin_ no puede ser decrementado en -n elementos, el comportamiento no está definido.

Parámetros

n - número de incrementos máximos del iterador

Valor de retorno

* this

Ejemplo

#include <algorithm>
#include <array>
#include <iostream>
#include <iterator>
#include <ranges>
void print(auto name, auto const sub)
{
    std::cout << name << ".size() == " << sub.size() << "; { ";
    std::ranges::for_each(sub, [](int x) { std::cout << x << ' '; });
    std::cout << "}\n";
};
int main()
{
    std::array arr{1, 2, 3, 4, 5, 6, 7};
    std::ranges::subrange sub{std::next(arr.begin()), std::prev(arr.end())};
    print("1) sub", sub);
    print("2) sub", sub.advance(3));
    print("3) sub", sub.advance(-2));
}

Salida:

1) sub.size() == 5; { 2 3 4 5 6 }
2) sub.size() == 2; { 5 6 }
3) sub.size() == 4; { 3 4 5 6 }

Informes de defectos

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

DR Se aplica a Comportamiento publicado Comportamiento correcto
LWG 3433 C++20 el comportamiento era indefinido si n < 0 se define correctamente si begin_ puede ser decrementado

Véase también

obtiene una copia del subrange con su iterador avanzado por una distancia dada
(función miembro pública)
obtiene una copia del subrange con su iterador decrementado por una distancia dada
(función miembro pública)
avanza un iterador por una distancia dada
(plantilla de función)
avanza un iterador por una distancia dada o hasta un límite especificado
(objeto función de algoritmo)