std::prev
| Definiert in Header <iterator> |
||
template< class BidirIt > BidirIt prev( BidirIt it, typename std::iterator_traits<BidirIt>::difference_type n = 1 ); |
(seit C++11) (bis C++17) |
|
| template< class BidirIt > constexpr |
(seit C++17) | |
Gibt den n-ten Vorgänger (oder -n-ten Nachfolger, wenn n negativ ist) des Iterators it zurück.
Inhalt |
[bearbeiten] Parameter
| it | - | ein Iterator |
| n | - | Anzahl der Elemente, um die it zurückgeschoben werden soll |
| Typanforderungen | ||
-BidirIt muss die Anforderungen von LegacyBidirectionalIterator erfüllen. | ||
[bearbeiten] Rückgabewert
Ein Iterator vom Typ BidirIt, der den n-ten Vorgänger (oder -n-ten Nachfolger, wenn n negativ ist) des Iterators it darstellt.
[bearbeiten] Komplexität
Linear.
Wenn BidirIt zusätzlich die Anforderungen von LegacyRandomAccessIterator erfüllt, ist die Komplexität konstant.
[bearbeiten] Mögliche Implementierung
template<class BidirIt> constexpr // since C++17 BidirIt prev(BidirIt it, typename std::iterator_traits<BidirIt>::difference_type n = 1) { std::advance(it, -n); return it; } |
[bearbeiten] Anmerkungen
Obwohl der Ausdruck --c.end() oft kompiliert, ist dies nicht garantiert: c.end() ist ein rvalue-Ausdruck, und es gibt keine Iterator-Anforderung, die spezifiziert, dass die Dekrementierung eines rvalue garantiert funktioniert. Insbesondere, wenn Iteratoren als Zeiger implementiert sind oder ihr operator-- mit lvalue-Referenz qualifiziert ist, kompiliert --c.end() nicht, während std::prev(c.end()) dies tut.
[bearbeiten] Beispiel
#include <iostream> #include <iterator> #include <vector> int main() { std::vector<int> v{3, 1, 4}; auto it = v.end(); auto pv = std::prev(it, 2); std::cout << *pv << '\n'; it = v.begin(); pv = std::prev(it, -2); std::cout << *pv << '\n'; }
Ausgabe
1 4
[bearbeiten] Siehe auch
| (C++11) |
inkrementiert einen Iterator (Funktionsvorlage) |
| bewegt einen Iterator um die angegebene Distanz vorwärts (Funktionsvorlage) | |
| gibt die Distanz zwischen zwei Iteratoren zurück (Funktionsvorlage) | |
| (C++20) |
dekrementiert einen Iterator um eine gegebene Distanz oder zu einer Grenze (Algorithmus-Funktionsobjekt) |