Manipulation de données - Recherche et remplacement

Décembre 2016

Recherche et remplacement

Les algorithmes de remplacement permettent de remplacer tous les éléments d’un conteneur vérifiant une propriété particulière par un autre élément dont la valeur doit être fournie en argument. Les éléments devant être remplacés peuvent être identifiés soit par leur valeur, soit par une condition.

replace, replace_if et replace_copy_if

Voici la déclaration dans la STL :

template <class ForwardIterator, class T>  
void replace(ForwardIterator premier, ForwardIterator dernier,  
    const T &ancienne_valeur, const T &nouvelle_valeur);  

template <class InputIterator, class OutputIterator, class T>  
void replace_copy(InputIterator premier, InputIterator dernier,  
    OutputIterator destination,  
    const T &ancienne_valeur, const T &nouvelle_valeur);  

template <class ForwardIterator, class Predicat, class T>  
void replace_if(ForwardIterator premier, ForwardIterator dernier,  
    Predicat p, const T &nouvelle_valeur);  

template <class InputIterator, class OutputIterator,  
    class Predicat, class T>  
void replace_copy_if(InputIterator premier, InputIterator dernier,  
    OutputIterator destination,  
    Predicat p, const T &nouvelle_valeur);

À savoir

Lorsque le type de la valeur renvoyée par un objet fonction unaire est bool, on dit que la fonction est un prédicat unaire. Un objet fonction binaire qui renvoie une valeur bool est nommé prédicat binaire. La bibliothèque C++ standard définit plusieurs prédicats courants dans l’en-tête <functional>. Ces prédicats sont listés dans le tableau 9.1.

Tableau 9.1 : prédicats définis dans <functional>xe "prédicats"

FonctionTypeDescription
equal_tobinairearg1 == arg2
not_equal_tobinairearg1 != arg2
greaterbinairearg1 > arg2
greater_equalbinairearg1 >= arg2
lessbinairearg1 < arg2
less_equalbinairearg1 <= arg2
logical_andbinairearg1 && arg2
logical_orbinairearg1 ⎢⎢ arg2
logical_notbinaire!arg1


Le code 9.4 illustre l’algorithme replace.

Code 9.4 : algorithme de recherche et de remplacement

#include <iostream>  
#include <algorithm>  

using namespace std;  

int main()  
{  
   int tab[10] = {1, 2, 10, 9, 3, 2, 9, 4, 2, 9};  
   //On remplace tous les 9 par des 3 :  
   replace(tab, tab+10, 9, 3);  
   //On affiche le résultat :  
   int i;  
   for (i=0; i<10; i++)  
      cout << tab[i] << endl;  
}


Le texte original de cette fiche pratique est extrait de
«Tout sur le C++» (Christine EBERHARDT, Collection
CommentCaMarche.net, Dunod, 2009)

A voir également :

Ce document intitulé «  Manipulation de données - Recherche et remplacement  » issu de CommentCaMarche (www.commentcamarche.net) est mis à disposition sous les termes de la licence Creative Commons. Vous pouvez copier, modifier des copies de cette page, dans les conditions fixées par la licence, tant que cette note apparaît clairement.