This shows you the differences between two versions of the page.
Both sides previous revision Previous revision Next revision | Previous revision | ||
in204:tds:sujets:td6:part1 [2022/10/08 16:36] 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 38: | Line 37: | ||
* 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> | ||
Line 79: | 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 116: | 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> | <code cpp> | ||
Line 136: | Line 135: | ||
<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 143: | 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> |