Namensräume
Varianten
Aktionen

operator-(std::common_iterator)

Von cppreference.com
 
 
Iterator-Bibliothek
Iterator-Konzepte
Iterator-Primitive
Algorithmus-Konzepte und Hilfsprogramme
Indirekte aufrufbare Konzepte
Gemeinsame Algorithmus-Anforderungen
(C++20)
(C++20)
(C++20)
Dienstprogramme
(C++20)
Iterator-Adapter
Bereichszugriff
(C++11)(C++14)
(C++14)(C++14)  
(C++11)(C++14)
(C++14)(C++14)  
(C++17)(C++20)
(C++17)
(C++17)
 
 
template< std::sized_sentinel_for<I> I2, std::sized_sentinel_for<I> S2 >

    requires std::sized_sentinel_for<S, I2>
friend constexpr std::iter_difference_t<I2>

    operator-( const common_iterator& x, const std::common_iterator<I2, S2>& y );
(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 ein S2-Objekt enthält, d. h. beide enthalten ein Sentinel.
  • Andernfalls alt_x - alt_y, wobei alt_x und alt_y die 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) [edit]