std:: prev
|
Défini dans l'en-tête
<iterator>
|
||
|
template
<
class
BidirIt
>
BidirIt prev ( BidirIt it, typename std:: iterator_traits < BidirIt > :: difference_type n = 1 ) ; |
(depuis C++11)
(jusqu'à C++17) |
|
|
template
<
class
BidirIt
>
constexpr
|
(depuis C++17) | |
Retourne le n ème prédécesseur (ou le - n ème successeur si n est négatif) de l'itérateur it .
Table des matières |
Paramètres
| it | - | un itérateur |
| n | - | nombre d'éléments it doit être descendu |
| Exigences de type | ||
-
BidirIt
doit satisfaire aux exigences de
LegacyBidirectionalIterator
.
|
||
Valeur de retour
Un itérateur de type
BidirIt
qui contient le
n
ème
prédécesseur (ou le
-
n
ème
successeur si
n
est négatif) de l'itérateur
it
.
Complexité
Linéaire.
Cependant, si
BidirIt
satisfait également aux exigences de
LegacyRandomAccessIterator
, la complexité est constante.
Implémentation possible
template<class BidirIt> constexpr // depuis C++17 BidirIt prev(BidirIt it, typename std::iterator_traits<BidirIt>::difference_type n = 1) { std::advance(it, -n); return it; } |
Notes
Bien que l'expression -- c. end ( ) compile souvent, elle n'est pas garantie de le faire : c. end ( ) est une expression rvalue, et il n'existe aucune exigence sur les itérateurs spécifiant que le décrément d'une rvalue est garanti de fonctionner. En particulier, lorsque les itérateurs sont implémentés comme des pointeurs ou que leur operator -- est qualifié de référence lvalue, -- c. end ( ) ne compile pas, tandis que std :: prev ( c. end ( ) ) le fait.
Exemple
#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'; }
Sortie :
1 4
Voir aussi
|
(C++11)
|
incrémente un itérateur
(modèle de fonction) |
|
avance un itérateur d'une distance donnée
(modèle de fonction) |
|
|
retourne la distance entre deux itérateurs
(modèle de fonction) |
|
|
(C++20)
|
décrémente un itérateur d'une distance donnée ou jusqu'à une limite
(objet fonction algorithme) |