Namespaces
Variants

std::experimental::ranges:: distance

From cppreference.net
namespace {

constexpr /* unspecified */ distance = /* unspecified */ ;

}
(ranges TS)
(Anpassungspunktobjekt)
Aufrufsignatur
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 den Abstand zwischen first und last zurück, oder zwischen Anfang und Ende des Bereichs r .

1) Wenn SizedSentinel < S, I > erfüllt ist, entspricht dies return last - first ; . Andernfalls wird die Anzahl der Inkremente zurückgegeben, die benötigt werden, um von first zu last zu gelangen. Wenn [ first , last ) keinen Bereich bezeichnet, dann müssen I und S denselben Typ haben und müssen SizedSentinel modellieren, und [ last , first ) muss einen Bereich bezeichnen. Andernfalls ist das Verhalten undefiniert.
2) Entspricht return ranges:: distance ( ranges:: begin ( r ) , ranges:: end ( r ) ) ; .
3) Entspricht return ranges:: size ( r ) ; .

Instanziierung von Überladungen (2,3) kann fehlerhaft sein, wenn der Header <experimental/ranges/range> nicht vor dem Instanziierungszeitpunkt eingebunden wurde.

Inhaltsverzeichnis

Customization Point Objects

Der Name ranges::distance bezeichnet ein Customization Point Object , welches ein Funktionsobjekt eines Literal Semiregular Klassentyps ist (zur Veranschaulichung als DistanceT bezeichnet). Alle Instanzen von DistanceT sind gleich. Daher kann ranges::distance 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 an ranges::distance oben erfüllen, wird DistanceT ranges :: Invocable < const DistanceT, Args... > erfüllen. Andernfalls nimmt kein Funktionsaufrufoperator von DistanceT an der Überladungsauflösung teil.

In jeder Übersetzungseinheit, in der ranges::distance definiert ist, verweist es 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

Der Abstand zwischen first und last , oder zwischen dem Anfang und dem Ende des Bereichs r .

Beispiel

Siehe auch

gibt den Abstand zwischen zwei Iteratoren zurück
(Funktionstemplate)
bewegt einen Iterator um eine gegebene Distanz
(Funktionstemplate)
erhöht einen Iterator
(Funktionstemplate)
verringert einen Iterator
(Funktionstemplate)
ermittelt die Größe eines Bereichs, dessen Größe in konstanter Zeit berechnet werden kann
(Anpassungspunktobjekt)