operator-(std::counted_iterator)
| template< std::common_with<I> I2 > friend constexpr std::iter_difference_t<I2> operator-( |
(seit C++20) | |
Berechnet den Abstand zwischen zwei Iterator-Adaptoren.
Das Verhalten ist undefiniert, wenn x und y nicht auf Elemente derselben Sequenz zeigen. Das heißt, es muss ein n existieren, so dass std::next(x.base(), x.count() + n) und std::next(y.base(), y.count() + n) auf dasselbe Element verweisen.
Diese Funktion-Template ist für normale unqualifizierte oder qualifizierte Suche nicht sichtbar und kann nur durch Argument-abhängige Suche gefunden werden, wenn std::counted_iterator<I> eine assoziierte Klasse der Argumente ist.
Inhalt |
[bearbeiten] Parameter
| x, y | - | Iterator-Adaptoren, für die die Differenz berechnet werden soll |
[bearbeiten] Rückgabewert
y.count() - x.count()
[bearbeiten] Hinweise
Da die *Länge* herunterzählt und nicht hoch, ist die Reihenfolge der Argumente des operator- im zugrundeliegenden Ausdruck umgekehrt, d. h. y ist *lhs* (linker Operand) und x ist *rhs* (rechter Operand).
[bearbeiten] Beispiel
#include <initializer_list> #include <iterator> int main() { static constexpr auto v = {1, 2, 3, 4, 5, 6}; constexpr std::counted_iterator<std::initializer_list<int>::iterator> it1{v.begin(), 5}, it2{it1 + 3}, it3{v.begin(), 2}; static_assert(it1 - it2 == -3); static_assert(it2 - it1 == +3); // static_assert(it1 - it3 == -3); // UB: operands of operator- do not refer to // elements of the same sequence }
[bearbeiten] Siehe auch
inkrementiert oder dekrementiert den counted_iterator(öffentliche Memberfunktion) | |
| (C++20) |
bewegt den Iterator vorwärts (Funktionstemplate) |
| berechnet die vorzeichenbehaftete Distanz zum Ende (function template) |