std::ranges:: prev
| 
           
           Défini dans l'en-tête
            
         
            
             <iterator>
            
           
           | 
         ||
| 
           
           Signature d'appel
           
          | 
         ||
| 
           
           
            
             template
            
            
             <
            
            
             
              std::
              
               bidirectional_iterator
              
             
            
            I
            
             >
            
             
         constexpr I prev ( I i ) ;  | 
         (1) | (depuis C++20) | 
| 
           
           
            
             template
            
            
             <
            
            
             
              std::
              
               bidirectional_iterator
              
             
            
            I
            
             >
            
             
         constexpr I prev ( I i, std:: iter_difference_t < I > n ) ;  | 
         (2) | (depuis C++20) | 
| 
           
           
            
             template
            
            
             <
            
            
             
              std::
              
               bidirectional_iterator
              
             
            
            I
            
             >
            
             
         constexpr I prev ( I i, std:: iter_difference_t < I > n, I bound ) ;  | 
         (3) | (depuis C++20) | 
Retourne le n ème prédécesseur de l'itérateur i .
Les entités de type fonction décrites sur cette page sont des objets fonction d'algorithmes (informellement appelés niebloids ), c'est-à-dire :
- Les listes d'arguments de modèle explicites ne peuvent pas être spécifiées lors de l'appel de l'une d'entre elles.
 - Aucune d'entre elles n'est visible pour la recherche dépendante des arguments .
 - Lorsque l'une d'entre elles est trouvée par la recherche non qualifiée normale comme nom à gauche de l'opérateur d'appel de fonction, la recherche dépendante des arguments est inhibée.
 
         Table des matières | 
       
Paramètres
| i | - | un itérateur | 
| n | - | nombre d'éléments i doit être descendu | 
| bound | - | itérateur désignant le début de la plage i pointe vers | 
Valeur de retour
Complexité
Implémentation possible
         struct prev_fn { template<std::bidirectional_iterator I> constexpr I operator()(I i) const { --i; return i; } template<std::bidirectional_iterator I> constexpr I operator()(I i, std::iter_difference_t<I> n) const { ranges::advance(i, -n); return i; } template<std::bidirectional_iterator I> constexpr I operator()(I i, std::iter_difference_t<I> n, I bound) const { ranges::advance(i, -n, bound); return i; } }; inline constexpr auto prev = prev_fn();  | 
       
Notes
       Bien que l'expression
       
        
         
          --
         
         r.
         
          end
         
         
          (
         
         
          )
         
        
       
       compile souvent pour les conteneurs, cela n'est pas garanti :
       
        
         r.
         
          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,
       
        
         
          --
         
         r.
         
          end
         
         
          (
         
         
          )
         
        
       
       ne compile pas, tandis que
       
        
         ranges
         
          ::
         
         
          prev
         
         
          (
         
         r.
         
          end
         
         
          (
         
         
          )
         
         
          )
         
        
       
       le fait.
      
       Ceci est encore exacerbé par les plages qui ne modélisent pas
       
        
         
          
           ranges::
           
            common_range
           
          
         
        
       
       . Par exemple, pour certaines plages sous-jacentes,
       
        
         ranges
         
          ::
         
         
          transform_view
         
         
          ::
         
         
          end
         
        
       
       n'a pas le même type de retour que
       
        
         ranges
         
          ::
         
         
          transform_view
         
         
          ::
         
         
          begin
         
        
       
       , et donc
       
        
         
          --
         
         r.
         
          end
         
         
          (
         
         
          )
         
        
       
       ne compilera pas. Ce n'est pas quelque chose que
       
        ranges::prev
       
       peut aider à résoudre, mais il existe des solutions de contournement.
      
Exemple
#include <iostream> #include <iterator> #include <vector> int main() { std::vector<int> v{3, 1, 4}; auto pv = std::ranges::prev(v.end(), 2); std::cout << *pv << '\n'; pv = std::ranges::prev(pv, 42, v.begin()); std::cout << *pv << '\n'; }
Sortie :
1 3
Voir aussi
| 
          
           
            
             
              (C++20)
             
            
           
           
          | 
        
         incrémente un itérateur d'une distance donnée ou jusqu'à une limite
          (objet fonction algorithme)  | 
       
| 
          
           
            
             
              (C++20)
             
            
           
           
          | 
        
         avance un itérateur d'une distance donnée ou jusqu'à une limite donnée
          (objet fonction algorithme)  | 
       
| 
          
           
            
             
              (C++11)
             
            
           
           
          | 
        
         décrémente un itérateur
          (fonction template)  |