User Tools

Site Tools


in204:tds:sujets:td6:part2

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:part2 [2022/10/08 16:10]
bmonsuez
in204:tds:sujets:td6:part2 [2022/11/18 10:49] (current)
Line 5: Line 5:
 ===== Question n°1 ===== ===== Question n°1 =====
  
-Nous considérons toujours notre code affichant le contenu d'​un ​containeur ​tel que définit ​dans la [[in204:​tds:​sujets:​td6:​part1|première partie]].+Nous considérons toujours notre code affichant le contenu d'​un ​conteneur ​tel que défini ​dans la [[in204:​tds:​sujets:​td6:​part1|première partie]].
  
 <code cpp> <code cpp>
Line 23: Line 23:
 </​code>​ </​code>​
  
-===== Question n°1.1 =====+==== Question n°1.1 =====
  
-Déterminer ce qui va caractériser un containeur ​pouvant être pris comme argument par la fonction précédente ?+Déterminer ce qui va caractériser un conteneur ​pouvant être pris comme argument par la fonction précédente ?
  
 <hidden Correction>​ <hidden Correction>​
  
-En fait, il est attendu que le containeur ​fournisse deux méthodes :+En fait, il est attendu que le conteneur ​fournisse deux méthodes :
  
   * `begin()`: retournant un itérateur marquant le début de la séquence,   * `begin()`: retournant un itérateur marquant le début de la séquence,
Line 35: Line 35:
  
 L'​itérateur qui est retourné doit supporter : L'​itérateur qui est retourné doit supporter :
-  * l'​accès en lecture des données stockées dans le containeur,+  * l'​accès en lecture des données stockées dans le conteneur,
   * le parcours en avant.   * le parcours en avant.
  
Line 43: Line 43:
  
  
-===== Question n°1.2 =====+==== Question n°1.2 =====
  
-Implanter un concept qui permet de formaliser les exigences que vous venais ​de formuler ?+Implanter un concept qui permet de formaliser les exigences que vous venez de formuler ?
  
 <hidden Correction>​ <hidden Correction>​
Line 55: Line 55:
     { a.end() } -> std::​forward_iterator;​     { a.end() } -> std::​forward_iterator;​
 }; };
-<​code>​+</code>
  
 </​hidden>​ </​hidden>​
  
-===== Question n°1.3 =====+==== Question n°1.3 =====
  
-Ajouter les contraintes à l'​opérateur ​`<<qui a été défini pour un containeur.+Ajouter les contraintes à l'​opérateur ​%%<<%% qui a été défini pour un conteineur.
  
 <hidden Correction>​ <hidden Correction>​
 +<code cpp>
 template<​typename containerT, typename charT, typename traits = std::​char_traits<​charT>>​ template<​typename containerT, typename charT, typename traits = std::​char_traits<​charT>>​
 requires Browsable<​containerT>​ requires Browsable<​containerT>​
Line 79: Line 80:
     return aStream;     return aStream;
  
 +</​code>​
 </​hidden>​ </​hidden>​
  
  
-===== Question n°1.4 =====+==== Question n°1.4 =====
  
 Introduisez une implantation de l'​opérateur `<<` qui pour tout type affiche '​NONE'​. Introduisez une implantation de l'​opérateur `<<` qui pour tout type affiche '​NONE'​.
  
 <hidden Correction>​ <hidden Correction>​
 +<code cpp>
 template<​typename T, typename charT, typename traits = std::​char_traits<​charT>>​ template<​typename T, typename charT, typename traits = std::​char_traits<​charT>>​
 std::​basic_ostream<​charT,​ traits>&​ operator << (std::​basic_ostream<​charT,​ traits>&​ aStream, const T& aContainer) std::​basic_ostream<​charT,​ traits>&​ operator << (std::​basic_ostream<​charT,​ traits>&​ aStream, const T& aContainer)
Line 94: Line 96:
     return aStream;     return aStream;
 } }
 +</​code>​
 </​hidden>​ </​hidden>​
  
  
-==== Question n°2 ====+===== Question n°2 ====
  
 Nous avons deux fonctions pour effectuer un tri, l'​algorithme simple de tri que nous avons implanté et l'​algorithme ``std::​sort`` fourni par la STL.  Nous avons deux fonctions pour effectuer un tri, l'​algorithme simple de tri que nous avons implanté et l'​algorithme ``std::​sort`` fourni par la STL. 
  
-Cependant notre algorithme fonctionne pour des itérateurs qui ne supporte par l'​accès indexé tandis que l'​algorithme ``std::​sort`` est un quicksort et nécessite un accès indexé mais qui est plus rapide.+Cependant notre algorithme fonctionne pour des itérateurs qui ne supportent pas l'​accès indexé tandis que l'​algorithme ``std::​sort`` est un quicksort et nécessite un accès indexé mais qui est plus rapide.
  
-Modifier le code de ``std::​simple_sort`` pour appeller ``std::​sort`` si jamais les itérateurs sont des itérateurs supportant l'​accès direct (``std::random_iterator``).+Modifier le code de ``std::​simple_sort`` pour appeller ``std::​sort`` si jamais les itérateurs sont des itérateurs supportant l'​accès direct (``std::random_access_iterator``).
  
 <hidden Correction>​ <hidden Correction>​
 +<code cpp>
 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::​random_access_iterator<​iterator>​ && ​ +    requires(std::​forward_iterator<​iterator>​ && ! std::​random_access_iterator<​iterator>​ && std::​input_or_output_iterator<​iterator>​)
-    ​std::​input_or_output_iterator<​iterator>​)+
 { {
 +    std::cout << "​Insertion Sort\n";​
     for(;start != end; start ++)     for(;start != end; start ++)
     {     {
Line 127: Line 130:
     requires(std::​random_access_iterator<​iterator>​ && std::​input_or_output_iterator<​iterator>​)     requires(std::​random_access_iterator<​iterator>​ && std::​input_or_output_iterator<​iterator>​)
 { {
 +    std::cout << "​Quicksort\n";​
     return std::​sort(start,​ end);     return std::​sort(start,​ end);
 } }
 +</​code>​
 +
 +Et nous exécutons le code suivant :
 +
 +<code cpp>
 +{
 +    std::​list<​int>​ l = {1, 7, 3, 4, 9, 2, 5};
 +    std::​vector<​int>​ v(l.begin(),​ l.end());
 +    simple_sort(l.begin(),​ l.end());
 +    std::cout << l << std::endl;
 +    simple_sort(v.begin(),​ v.end());
 +    std::cout << v << std::endl;
 +</​code>​
 + 
 +qui génèrera la sortie suivante:
 +<​code>​
 +Insertion Sort
 +{1, 2, 3, 4, 5, 7, 9}
 +Quicksort
 +{1, 2, 3, 4, 5, 7, 9}
 +</​code>​
 +
 </​hidden>​ </​hidden>​
  
  
in204/tds/sujets/td6/part2.1665245438.txt.gz · Last modified: 2022/10/08 16:10 by bmonsuez