Namensräume
Varianten
Aktionen

std::experimental::ranges::distance

Von cppreference.com
< cpp‎ | experimental‎ | ranges
 
 
 
 
Iterator-Bibliothek
Iterator-Konzepte
Indirekte aufrufbare Konzepte
                                                  
                                                  
                                                  
Gemeinsame Algorithmus-Anforderungen
                                                  
Konzept-Dienstprogramme
Iterator-Dienstprogramme und -Operationen
distance
Iterator-Traits
Iterator-Adapter
Stream-Iteratoren
 
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.

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

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

[bearbeiten] Siehe auch

gibt die Distanz zwischen zwei Iteratoren zurück
(Funktionsvorlage) [bearbeiten]
bewegt einen Iterator um die angegebene Distanz vorwärts
(Funktionsvorlage) [bearbeiten]
inkrementiert einen Iterator
(Funktionsvorlage) [bearbeiten]
dekrementiert einen Iterator
(Funktionsvorlage) [bearbeiten]
erhält die Größe eines Bereichs, dessen Größe in konstanter Zeit berechnet werden kann
(Anpassungspunkt-Objekt)[bearbeiten]