Namespaces
Variants

operator-(std::reverse_iterator)

Von de.cppreference.net
 
 
Iteratorenbibliothek
Iteratorkonzepte
Iteratorprimitive
Algorithmuskonzepte und Hilfsmittel
Indirekt aufrufbare Konzepte
Allgemeine Algorithmusanforderungen
(C++20)
(C++20)
(C++20)
Hilfsmittel
(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)
 
 
Definiert in Header <iterator>
template< class Iter1, class Iter2 >
typename reverse_iterator<Iter>::difference_type
    operator-( const reverse_iterator<Iter1>& lhs,
               const reverse_iterator<Iter2>& rhs );
(bis C++11)
template< class Iter1, class Iter2 >
auto operator-( const reverse_iterator<Iter1>& lhs,
                const reverse_iterator<Iter2>& rhs )
    -> decltype(rhs.base() - lhs.base());
(seit C++11)
(constexpr seit C++17)

Gibt die Distanz zwischen zwei Iterator-Adaptern zurück.

Parameter

lhs, rhs - Iterator-Adapter zur Berechnung der Differenz von

Rückgabewert

rhs. base ( ) - lhs. base ( )

Hinweise

operator - gibt rhs. base ( ) - lhs. base ( ) zurück und nicht lhs. base ( ) - rhs. base ( ) da es sich um einen Reverse-Iterator handelt.

Beispiel

#include <iostream>
#include <iterator>
#include <list>
#include <vector>
int main()
{
    std::vector vec{0, 1, 2, 3};
    std::reverse_iterator<std::vector<int>::iterator>
        vec_ri1{std::reverse_iterator{vec.rbegin()}},
        vec_ri2{std::reverse_iterator{vec.rend()}};
    std::cout << (vec_ri2 - vec_ri1) << ' '; // 4
    std::cout << (vec_ri1 - vec_ri2) << '\n'; // -4
    std::list lst{5, 6, 7, 8};
    std::reverse_iterator<std::list<int>::iterator>
        lst_ri1{std::reverse_iterator{lst.rbegin()}},
        lst_ri2{std::reverse_iterator{lst.rend()}};
//  auto n = (lst_ri1 - lst_ri2); // Fehler: Die zugrundeliegenden Iteratoren implementieren
                                  //        keinen Random-Access-Iterator
}

Ausgabe:

4 -4

Fehlerberichte

Die folgenden verhaltensändernden Fehlerberichte wurden rückwirkend auf zuvor veröffentlichte C++-Standards angewendet.

DR Angewendet auf Verhalten wie veröffentlicht Korrektes Verhalten
LWG 280 C++98 heterogene Subtraktion war nicht erlaubt erlaubt

Siehe auch

erhöht oder verringert den reverse_iterator
(öffentliche Elementfunktion)
erhöht den Iterator
(Funktionstemplate)