Skip to content

Latest commit

 

History

History
76 lines (61 loc) · 2.55 KB

File metadata and controls

76 lines (61 loc) · 2.55 KB

Foncteurs

*Les foncteurs sont des objets de classes qui surchargent l’opérateur () Ce sont donc des objets-fonctions, ou fonctions généralisées On peut les passer en argument à une méthode ou à une autre fonction

class Addition{ 
    public: int operator()(int a, int b) //surcharge de l'opérateur () 
    {
        return a+b;
    }
};

int main() { 
    Addition foncteur; //crée un objet de type foncteur			int a = 2, b=3; 
    cout << foncteur(a,b) << endl; //affiche 5
    return 0; 
}
class Translate{
    double translation;
    public:
        Translate ( const double translation ):m_translation ( translation ) {}
        const double operator ()(const double x)
        {
            return x+ m_translation;
        }
};

int main(){
    Translate foncteurTranslation (5.) ; // foncteur qui translate de 5
    double x =4.3;
    cout << foncteurTranslation (x) << endl ; // affiche 9.3
}

Les algorithmes

  • Les algorithmes sont des fonctions qui permettent de faire des modifications sur les conteneurs (supprimer les doublons, chercher un élément, trier un tableau,…)
  • La STL en contient un grand nombre : http://www.cplusplus.com/reference/algorithm/
  • Les algorithmes de la STL sont optimisés, il ne sert à rien de vouloir les réécrire

Exemple 1

vector <int > tab (30) ; // vecteur de 30 entiers
fill (tab.begin () , tab.end () , 3); // remplit le tableau avec des 3
//foncteur GenererNb qui renvoie un entier aléatoire à coder
generate (tab.begin() , tab. begin()+10 , GenererNb()); //appelle le foncteur GenererNb pour les 10 premiers éléments de tab et stocke le résultat dans l’élément

Exemple 2

vector <int > tab (30) ; // vecteur de 30 entiers
vector <int > tabResult (30) ;
Translate unFoncteur(2.) ; //foncteur qui translate de 2
transform ( tab.begin() , tab.end() , tabResult.begin() , unFoncteur ); /* applique unFoncteur a chaque élément de tab et stocke chaque élément transformé dans tabResult */

struct AfficheInt{
    void operator()(const int n) { cout << n << endl ; }
};

AfficheInt  unAutreFoncteur ;
for_each (tab.begin() , tab.end() , unAutreFoncteur ); /* applique unAutreFoncteur a chaque élément de tab, donc affiche les éléments à la console*/

int minimum = * min_element ( tab.begin(), tab.end()); //récupère le min
int maximum = * max_element ( tab.begin() , tab.end()); //récupère le max
vector<int>::iterator it = find(tab.begin(), tab.end(), 100) ; //recherche 100
sort (tab.begin(), tab.end ()); //tri tab

Exercice 16