Namespaces
Variants

std::experimental::ranges:: advance

From cppreference.net
namespace {

constexpr /* unspecified */ advance = /* unspecified */ ;

}
(ranges TS)
(Anpassungspunktobjekt)
Aufrufsignatur
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)

Bewegt den Iterator i n Mal vorwärts, oder bis bound erreicht wird, je nachdem, was zuerst eintritt.

1) Falls I das Konzept RandomAccessIterator modelliert, äquivalent zu i + = n . Andernfalls wird i n-mal inkrementiert (oder dekrementiert, falls n negativ ist). Das Verhalten ist undefiniert, wenn n negativ ist und I das Konzept BidirectionalIterator nicht modelliert.
2) Wenn Assignable < I & , S > erfüllt ist, entspricht dies i = std :: move ( bound ) .
Andernfalls, wenn [ i , bound ) keinen gültigen Bereich bezeichnet, ist das Verhalten undefiniert.
Andernfalls, wenn SizedSentinel < S, I > erfüllt ist, äquivalent zu ranges:: advance ( i, bound - i ) .
Andernfalls inkrementiert i bis i == bound .
3) Wenn SizedSentinel < S, I > erfüllt ist, entspricht dies ranges:: advance ( i, bound ) wenn | n | >= | bound - i |, und ranges:: advance ( i, n ) andernfalls.
Andernfalls erhöht (oder verringert, falls n negativ ist) i entweder n -mal oder bis i == bound , je nachdem, was zuerst eintritt.
Wenn n > 0 , [ i , bound ) bezeichnet einen Bereich; wenn n == 0 , bezeichnet entweder [ i , bound ) oder [ bound , i ) einen Bereich; wenn n < 0 , [ bound , i ) bezeichnet einen Bereich, I und S müssen denselben Typ haben, und I muss BidirectionalIterator modellieren. Andernfalls ist das Verhalten undefiniert.

Inhaltsverzeichnis

Customization Point Objects

Der Name ranges::advance bezeichnet ein Customization Point Object , welches ein Funktionsobjekt mit einem literal Semiregular -Klassentyp ist (zur Veranschaulichung als AdvanceT bezeichnet). Alle Instanzen von AdvanceT sind gleich. Daher kann ranges::advance frei kopiert werden und seine Kopien können austauschbar verwendet werden.

Gegeben eine Menge von Typen Args... , falls std:: declval < Args > ( ) ... die Anforderungen für Argumente von ranges::advance oben erfüllen, wird AdvanceT ranges :: Invocable < const AdvanceT, Args... > erfüllen. Andernfalls nimmt kein Funktionsaufrufoperator von AdvanceT an der Überladungsauflösung teil.

In jeder Übersetzungseinheit, in der ranges::advance definiert ist, bezieht es sich auf dieselbe Instanz des Customization Point Objects. (Dies bedeutet, dass es frei in Dingen wie Inline-Funktionen und Funktionsvorlagen verwendet werden kann, ohne die One-Definition-Rule zu verletzen.)

Rückgabewert

1,2) (keine)
3) Die Anzahl der Inkrement-/Dekrement-Operationen, die nicht durchgeführt wurden, weil die bound erreicht wurde. Mit anderen Worten, n - M , wobei M die Distanz von der Startposition von i zur Endposition ist und negativ ist, wenn die Endposition vor der Startposition liegt.

Beispiel

Siehe auch

rückt einen Iterator um eine gegebene Distanz vor
(Funktions-Template)
gibt die Distanz zwischen einem Iterator und einem Sentinel, oder zwischen dem Anfang und dem Ende eines Bereichs zurück
(Funktions-Template)
erhöht einen Iterator
(Funktions-Template)
verringert einen Iterator
(Funktions-Template)