User Tools

Site Tools


in204:tds:sujets:td6:part1

Differences

This shows you the differences between two versions of the page.

Link to this comparison view

Both sides previous revision Previous revision
Next revision
Previous revision
in204:tds:sujets:td6:part1 [2022/10/08 15:26]
bmonsuez
in204:tds:sujets:td6:part1 [2022/11/18 10:49] (current)
Line 6: Line 6:
 ===== Question n°1===== ===== Question n°1=====
  
-Créer un projet dans lequel vous définissez intégrer ​le fichier "​simple_sort.hpp"​ qui contient la fonction de comparaison suivante:+Créer un projet dans lequel vous intégrez ​le fichier "​simple_sort.hpp"​ qui contient la fonction de comparaison suivante:
  
 <code cpp> <code cpp>
Line 13: Line 13:
  
 template<​typename ​ iterator>​ template<​typename ​ iterator>​
-void simple_sort(iterator start, iterator end)  +void simple_sort(iterator start, iterator end)
-    requires(std::​forward_iterator<​iterator>​ && std::​input_or_output_iterator<​iterator>​)+
 { {
     for(;start != end; start ++)     for(;start != end; start ++)
Line 36: Line 35:
 <hidden Correction>​ <hidden Correction>​
 Il s'agit d'un itérateur: Il s'agit d'un itérateur:
-  ​+ 
   * devant offrir une itération croissante,   * devant offrir une itération croissante,
-  * devant offrir la possibilité de reprendre l'​itération à partir d'une position antérieurement ​stocké.+  * devant offrir la possibilité de reprendre l'​itération à partir d'une position antérieurement ​stockée.
  
 Si nous regardons les caractéristiques des itérateurs:​ [[https://​en.cppreference.com/​w/​cpp/​iterator|Iterator library]], nous constatons que: Si nous regardons les caractéristiques des itérateurs:​ [[https://​en.cppreference.com/​w/​cpp/​iterator|Iterator library]], nous constatons que:
Line 53: Line 52:
 ==== Question n°1.2 ===== ==== Question n°1.2 =====
  
-Ajouter une contrainte imposant que le type passé à la fonction correspond bien au type d'​itérateur que vous avez identifié ​?+Ajouter une contrainte imposant que le type passé à la fonction correspond bien au type d'​itérateur que vous avez identifié.
  
 <hidden Correction>​ <hidden Correction>​
 +<code cpp>
 +template<​typename ​ iterator>​
 +void simple_sort(iterator start, iterator end) 
 +    requires(std::​forward_iterator<​iterator>​ && std::​input_or_output_iterator<​iterator>​)
 +{
 +    std::cout << "​Insertion Sort\n";​
 +    for(;start != end; start ++)
 +    {
 +        auto it = start; it++;
 +        for(;it != end; it ++)
 +        {
 +            // Compare si les deux elements sont dans le bon ordre.
 +            if (*start > *it)
 +                std::​swap(*start,​ *it);
 +        }
 +    }
 +}
 +</​code>​
 </​hidden>​ </​hidden>​
  
Line 61: Line 78:
 ==== Question n°1.3 ==== ==== Question n°1.3 ====
  
-Nous supposons ​ajouter l'​opérateur suivant qui liste l'​ensemble des éléments d'​un ​containeur:+Nous souhaitons ​ajouter l'​opérateur suivant qui liste l'​ensemble des éléments d'​un ​conteneur:
  
 <code cpp> <code cpp>
Line 98: Line 115:
 ==== Question n°1.4 ==== ==== Question n°1.4 ====
  
-Dans la question précédente,​ nous avons définit ​une nouvelle surcharge de l'​opérateur <<. En fait, cette surcharge n'est pas optimale, puisqu'​il suffit que je définisse un type quelconque non supporté et cela ne fonctionne plus :+Dans la question précédente,​ nous avons défini ​une nouvelle surcharge de l'​opérateur ​%%<<%%. En fait, cette surcharge n'est pas optimale, puisqu'​il suffit que je définisse un type quelconque non supporté et cela ne fonctionne plus :
  
 +<code cpp>
 #​include<​list>​ #​include<​list>​
 #​include"​sort.hpp"​ #​include"​sort.hpp"​
Line 112: Line 130:
     return 0;     return 0;
 } }
 +</​code>​
  
 Expliquer pourquoi le compilateur génére une erreur ? Expliquer pourquoi le compilateur génére une erreur ?
  
 <hidden Correction>​ <hidden Correction>​
-En fait, il n'y a pas de surcharge de l'​opérateur ​`<<pour le type `Toto`, en conséquence,​ le compilateur va rechercher dans les opérateurs qui n'ont pas de contraintes sur les types, vous vous souvenez qu'on essaye d'​abord les opérateurs les plus généraux et ensuite les moins généraux. Il trouve donc dans l'​espace de nom courant l'​opérateur :  ​+En fait, il n'y a pas de surcharge de l'​opérateur ​%%<<%% pour le type `Toto`, en conséquence,​ le compilateur va rechercher dans les opérateurs qui n'ont pas de contraintes sur les types, vous vous souvenez qu'on essaye d'​abord les opérateurs les plus généraux et ensuite les moins généraux. Il trouve donc dans l'​espace de nom courant l'​opérateur :  ​
  
 <code cpp> <code cpp>
Line 123: Line 142:
 </​code>​ </​code>​
  
-et ne sait pas que cet opérateur n'est définit que pour les objets qui sont des containers ​au sens de la STL. En conséquence de quoi, il génère une erreur puisqu'​il essaye d'​instancier un code qui ne supporte pas des objets de type `Toto`.+et ne sait pas que cet opérateur n'est définit que pour les objets qui sont des conteneurs ​au sens de la STL. En conséquence de quoi, il génère une erreur puisqu'​il essaye d'​instancier un code qui ne supporte pas des objets de type `Toto`.
  
 </​hidden>​ </​hidden>​
in204/tds/sujets/td6/part1.1665242816.txt.gz · Last modified: 2022/10/08 15:26 by bmonsuez