User Tools

Site Tools


in204:tds:sujets:td6:part1

This is an old revision of the document!


Partie I – Définitions des exigences

TD6

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:

#pragma once
#include<algorithm>
 
template<typename  iterator>
void simple_sort(iterator start, iterator end) 
    requires(std::forward_iterator<iterator> && std::input_or_output_iterator<iterator>)
{
    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);
        }
    }
}

Question n°1.1

Déterminer quel type d'itérateur est requis pour effectuer les opérations ?

Correction

Correction

Il s'agit d'un itérateur:

* devant offrir une itération croissante,
* devant offrir la possibilité de reprendre l'itération à partir d'une position antérieurement stocké.

Si nous regardons les caractéristiques des itérateurs: Iterator library, nous constatons que:

  • LegacyInputIterator: ne supporte pas plusieurs passes et ne supporte pas l'écriture,
  • LegacyForwardIterator: supporte plusieurs passes mais ne supporte pas obligatoire l'écriture,
  • LegacyOuputIterator: supporte l'écriture.

De fait, nous devons garantir à la fois la lecture et l'écriture, ce qui signifie que nous devons nous assurer que l'itérateur respect les contracts requis pour un LegacyForwardIterator et un LegacyOuputIterator.

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é ?

Correction

Correction

in204/tds/sujets/td6/part1.1665236826.txt.gz · Last modified: 2022/10/08 13:47 by bmonsuez