Namespaces
Variants

std:: prev

From cppreference.net
Iterator library
Iterator concepts
Iterator primitives
Algorithm concepts and utilities
Indirect callable concepts
Common algorithm requirements
(C++20)
(C++20)
(C++20)
Utilities
(C++20)
Iterator adaptors
Range access
(C++11) (C++14)
(C++14) (C++14)
(C++11) (C++14)
(C++14) (C++14)
(C++17) (C++20)
(C++17)
(C++17)
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

BidirIt prev ( BidirIt it, typename std:: iterator_traits < BidirIt > :: difference_type n = 1 ) ;
(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)
décrémente un itérateur d'une distance donnée ou jusqu'à une limite
(objet fonction algorithme)