operator==,<=>(std::counted_iterator)
| template< std::common_with<I> I2 > friend constexpr bool operator==( |
(1) | (seit C++20) |
| template< std::common_with<I> I2 > friend constexpr strong_ordering operator<=>( |
(2) | (seit C++20) |
Vergleicht die zugrunde liegenden Längen (d. h. Abstände zum Ende).
<=>.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.
Die Operatoren <, <=, >, >= und != sind synthetisiert aus operator<=> und operator== beziehungsweise.
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 adaptors |
[bearbeiten] Rückgabewert
[bearbeiten] Hinweise
Da die Länge nach unten zählt und nicht nach oben, ist die Reihenfolge der Argumente von operator<=> in der zugrunde liegenden Vergleichsoperation umgekehrt, d. h. y ist lhs, x ist rhs.
[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{v.begin(), 5}, it3{v.begin() + 1, 4}, it4{v.begin(), 0}; static_assert(it1 == it2); static_assert(it2 != it3); static_assert(it2 < it3); static_assert(it1 <= it2); static_assert(it3 != std::default_sentinel); static_assert(it4 == std::default_sentinel); // it2 == std::counted_iterator{v.begin(), 4}; // UB: operands do not refer to // elements of the same sequence }
[bearbeiten] Siehe auch
prüft, ob der Abstand zum Ende gleich 0 ist(function template) | |
| (C++20) |
bewegt den Iterator vorwärts (Funktionstemplate) |
| (C++20) |
berechnet die Distanz zwischen zwei Iterator-Adaptoren (Funktionstemplate) |