std::experimental::ranges::distance
| Definiert in Header <experimental/ranges/iterator> |
||
| namespace { constexpr /* unspecified */ distance = /* unspecified */; |
(Ranges TS) (Customization-Point-Objekt) |
|
| Aufruf-Signatur |
||
| template< Iterator I, Sentinel<I> S > constexpr ranges::difference_type_t<I> distance( I first, S last ); |
(1) | |
| template< Range R > constexpr ranges::difference_type_t<ranges::iterator_t<R>> distance( R&& r ); |
(2) | |
| template< SizedRange R > constexpr ranges::difference_type_t<ranges::iterator_t<R>> distance( R&& r ); |
(3) | |
Gibt die Distanz zwischen first und last zurück, oder zwischen dem Anfang und dem Ende des Bereichs r.
[first, last) keinen Bereich bezeichnet, müssen I und S denselben Typ haben und SizedSentinel modellieren, und [last, first) muss einen Bereich bezeichnen. Andernfalls ist das Verhalten undefiniert.Die Instanziierung der Überladungen (2,3) kann fehlerhaft sein, wenn die Headerdatei <experimental/ranges/range> vor dem Punkt der Instanziierung eingebunden wird.
Inhalt |
[bearbeiten] Customization Point Objects
Der Name ranges::distance bezeichnet ein Customization Point Object, das ist ein Funktionsobjekt eines literalen Semiregular-Klassentyps (der zur Veranschaulichung als DistanceT bezeichnet wird). Alle Instanzen von DistanceT sind gleich. Daher kann ranges::distance frei kopiert werden und seine Kopien können austauschbar verwendet werden.
Gegeben sei eine Menge von Typen Args.... Wenn std::declval<Args>()... die Anforderungen für Argumente von ranges::distance oben erfüllen, erfüllt DistanceT ranges::Invocable<const DistanceT, Args...>. Andernfalls nimmt kein Funktionsaufrufoperator von DistanceT an der Überladungsauflösung teil.
In jeder Translation Unit, in der ranges::distance definiert ist, bezieht es sich auf dieselbe Instanz des Customization Point Objects. (Das bedeutet, dass es frei in Inline-Funktionen und Funktionsvorlagen verwendet werden kann, ohne die Ein-Definitionen-Regel zu verletzen.)
[bearbeiten] Rückgabewert
Die Distanz zwischen first und last, oder zwischen dem Anfang und dem Ende des Bereichs r.
[bearbeiten] Beispiel
| Dieser Abschnitt ist unvollständig Grund: kein Beispiel |
[bearbeiten] Siehe auch
| gibt die Distanz zwischen zwei Iteratoren zurück (Funktionsvorlage) | |
| bewegt einen Iterator um die angegebene Distanz vorwärts (Funktionsvorlage) | |
| inkrementiert einen Iterator (Funktionsvorlage) | |
| dekrementiert einen Iterator (Funktionsvorlage) | |
| erhält die Größe eines Bereichs, dessen Größe in konstanter Zeit berechnet werden kann (Anpassungspunkt-Objekt) |