std::experimental::ranges::advance
| Definiert in Header <experimental/ranges/iterator> |
||
| namespace { constexpr /* nicht spezifiziert */ advance = /* nicht spezifiziert */; |
(Ranges TS) (Customization-Point-Objekt) |
|
| Aufruf-Signatur |
||
| 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) | |
Verschiebt den Iterator i um n Positionen vorwärts oder bis bound erreicht ist, je nachdem, was zuerst eintritt.
I RandomAccessIterator modelliert, ist dies ä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 BidirectionalIterator nicht modelliert.[i, bound) keinen Bereich bezeichnet, ist das Verhalten undefiniert.[i, bound) einen Bereich bezeichnen; wenn n == 0, muss entweder [i, bound) oder [bound, i) einen Bereich bezeichnen; wenn n < 0, muss [bound, i) einen Bereich bezeichnen, I und S müssen vom gleichen Typ sein und I muss BidirectionalIterator modellieren. Andernfalls ist das Verhalten undefiniert.Inhalt |
[bearbeiten] Customization Point Objects
Der Name ranges::advance bezeichnet ein Customization Point Object, das ein Function Object vom Typ einer Literal Semiregular Klasse ist (zur Veranschaulichung als AdvanceT bezeichnet). Alle Instanzen von AdvanceT sind gleich. Daher kann ranges::advance frei kopiert und seine Kopien können austauschbar verwendet werden.
Gegeben sei eine Menge von Typen Args.... Wenn std::declval<Args>()... die obigen Anforderungen für Argumente an ranges::advance erfüllen, erfüllt AdvanceT ranges::Invocable<const AdvanceT, Args...>. 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 Funktionenschablonen verwendet werden kann, ohne die Ein-Definitions-Regel zu verletzen.)
[bearbeiten] Rückgabewert
M der Abstand von der Startposition von i zur Endposition ist und negativ ist, wenn die Endposition vor der Startposition liegt.[bearbeiten] Beispiel
| Dieser Abschnitt ist unvollständig Grund: kein Beispiel |
[bearbeiten] Siehe auch
| bewegt einen Iterator um die angegebene Distanz vorwärts (Funktionsvorlage) | |
| gibt die Distanz zwischen einem Iterator und einem Sentinel zurück, oder zwischen dem Anfang und dem Ende eines Bereichs (Funktionsvorlage) | |
| inkrementiert einen Iterator (Funktionsvorlage) | |
| dekrementiert einen Iterator (Funktionsvorlage) |