Namespaces
Variants

std::experimental::ranges:: advance

From cppreference.net
Definido en el encabezado <experimental/ranges/iterator>
namespace {

constexpr /* no especificado */ advance = /* no especificado */ ;

}
(ranges TS)
(objeto de punto de personalización)
Firma de llamada
template < Iterator I >
constexpr void advance ( I & i, ranges :: difference_type_t < I > n ) ;
(1)
template < Iterator I, Sentinel < I > S >
constexpr void advance ( I & i, S bound ) ;
(2)
template < Iterator I, Sentinel < I > S >
constexpr ranges :: difference_type_t < I > advance ( I & i, ranges :: difference_type_t < I > n, S bound ) ;
(3)

Avanza el iterador i n veces, o hasta que se alcance bound , lo que ocurra primero.

1) Si I modela RandomAccessIterator , equivalente a i + = n . De lo contrario, incrementa (o decrementa si n es negativo) i n veces. El comportamiento es indefinido si n es negativo y I no modela BidirectionalIterator .
2) Si Assignable < I & , S > se satisface, equivalente a i = std :: move ( bound ) .
De lo contrario, si [ i , bound ) no denota un rango, el comportamiento es indefinido.
De lo contrario, si SizedSentinel < S, I > se satisface, equivalente a ranges:: advance ( i, bound - i ) .
De lo contrario, incrementa i hasta que i == bound .
3) Si SizedSentinel < S, I > se satisface, equivalente a ranges:: advance ( i, bound ) si | n | >= | bound - i |, y ranges:: advance ( i, n ) en caso contrario.
De lo contrario, incrementa (o decrementa si n es negativo) i ya sea n veces o hasta que i == bound , lo que ocurra primero.
Si n > 0 , [ i , bound ) denotará un rango; si n == 0 , ya sea [ i , bound ) o [ bound , i ) denotará un rango; si n < 0 , [ bound , i ) denotará un rango, I y S serán del mismo tipo, y I debe modelar BidirectionalIterator . De lo contrario, el comportamiento es indefinido.

Contenidos

Objetos de punto de personalización

El nombre ranges::advance denota un objeto de punto de personalización , que es un objeto función de tipo literal Semiregular (denotado, con fines expositivos, como AdvanceT ). Todas las instancias de AdvanceT son iguales. Por lo tanto, ranges::advance puede copiarse libremente y sus copias pueden usarse indistintamente.

Dado un conjunto de tipos Args... , si std:: declval < Args > ( ) ... cumplen los requisitos para argumentos de ranges::advance mencionados anteriormente, AdvanceT satisfará ranges :: Invocable < const AdvanceT, Args... > . De lo contrario, ningún operador de llamada a función de AdvanceT participa en la resolución de sobrecarga.

En cada unidad de traducción en la que ranges::advance está definido, se refiere a la misma instancia del objeto de punto de personalización. (Esto significa que puede usarse libremente en elementos como funciones inline y plantillas de funciones sin violar la regla de una definición .)

Valor de retorno

1,2) (ninguno)
3) El número de incrementos/decrementos no realizados debido a alcanzar bound . En otras palabras, n - M , donde M es la distancia desde la posición inicial de i hasta la posición final y es negativa si la posición final está antes de la posición inicial.

Ejemplo

Véase también

avanza un iterador una distancia dada
(plantilla de función)
retorna la distancia entre un iterador y un centinela, o entre el inicio y el final de un rango
(plantilla de función)
incrementa un iterador
(plantilla de función)
decrementa un iterador
(plantilla de función)