operator-(std::common_iterator)
| template< std::sized_sentinel_for<I> I2, std::sized_sentinel_for<I> S2 > requires std::sized_sentinel_for<S, I2> |
(seit C++20) | |
Berechnet den Abstand zwischen zwei Iterator-Adaptoren. Zwei Sentinel werden als gleich betrachtet.
Sei var das zugrunde liegende std::variant-Mitgliedsobjekt in std::common_iterator, das Verhalten ist undefiniert, wenn entweder x oder y ungültig ist, d. h. x.var.valueless_by_exception() || y.var.valueless_by_exception() true ist.
Diese Funktion-Schablone ist weder für normale unqualifizierte noch für qualifizierte Suchvorgänge sichtbar und kann nur durch Argument-abhängige Suche gefunden werden, wenn std::common_iterator<I> eine zugehörige Klasse der Argumente ist.
Inhalt |
[edit] Parameter
| x, y | - | Iterator-Adaptoren, für die die Differenz berechnet werden soll |
[edit] Rückgabewert
- 0, wenn x.var ein
S-Objekt enthält und y.var einS2-Objekt enthält, d. h. beide enthalten ein Sentinel. - Andernfalls alt_x - alt_y, wobei
alt_xundalt_ydie von x.var bzw. y.var gehaltenen Alternativen sind (entweder zwei Iteratoren oder ein Iterator und ein Sentinel).
[edit] Beispiel
#include <algorithm> #include <iostream> #include <iterator> int main() { int a[]{0, 1, 2, 3, 4, 5}; using CI = std::common_iterator< std::counted_iterator<int*>, std::default_sentinel_t >; CI i1{std::counted_iterator{a + 1, 2}}; CI i2{std::counted_iterator{a, 3}}; CI s1{std::default_sentinel}; CI s2{std::default_sentinel}; std::cout << (s2 - s1) << ' ' << (i2 - i1) << ' ' << (i1 - s1) << '\n'; }
Ausgabe
0 -1 -2
[edit] Fehlerberichte
Die folgenden Verhaltensändernden Fehlerberichte wurden rückwirkend auf zuvor veröffentlichte C++-Standards angewendet.
| DR | angewendet auf | Verhalten wie veröffentlicht | Korrigiertes Verhalten |
|---|---|---|---|
| LWG 3574 | C++20 | variant war vollständig constexpr (P2231R1), aber common_iterator nicht |
wurde ebenfalls constexpr gemacht |
[edit] Siehe auch
bewegt den common_iterator vorwärts(public member function) |