User Tools

Site Tools


in204:tds:sujets:td4: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:td4:part2 [2019/10/15 11:35]
bmonsuez [Question 2.0]
in204:tds:sujets:td4:part2 [2022/11/18 10:49] (current)
Line 107: Line 107:
  
 <hidden Correction Complétion de la classe interval>​ <hidden Correction Complétion de la classe interval>​
 +
 Nous débutons par compléter la classe ''​interval''​. La classe ''​interval''​ doit exposer au moins deux méthodes que sont les méthodes :  Nous débutons par compléter la classe ''​interval''​. La classe ''​interval''​ doit exposer au moins deux méthodes que sont les méthodes : 
  
Line 207: Line 208:
  
  \\  \\
- 
  
 </​hidden>​ </​hidden>​
  
 <hidden Correction Complétion de la classe interval_iterator>​ <hidden Correction Complétion de la classe interval_iterator>​
 +<nodisp 2>
  
 Pour la classe ''​interval_iterator''​ nous devons implanter les exigences relatives à un [[https://​en.cppreference.com/​w/​cpp/​named_req/​ForwardIterator|forward iterator]]. ​ Pour la classe ''​interval_iterator''​ nous devons implanter les exigences relatives à un [[https://​en.cppreference.com/​w/​cpp/​named_req/​ForwardIterator|forward iterator]]. ​
Line 280: Line 281:
     }     }
 </​code>​ \\ \\ Il faut désormais implanter les opérateurs d'​incrémentation de l'​itérateur (ie. pour passer à la valeur suivante). C'est l'​opérateur ''​++''​ qui a est sélectionné,​ cependant cet opérateur possède deux syntaxes : (1) ''​++it''​ qui signifie applique l'​opération ''​++''​ à l'​objet ''​it''​ et retourne une référence à cet objet après que l'​opération ''​++''​ a été effectuée; (2) ''​it++''​ qui signifie fait une copie de l'​objet //copy//, applique l'​opération à l'​objet ''​it''​ et retourne l'​objet //copy// comme résultat de l'​opération. L'​opérateur ''​operator ++()''​ correspond à la première synataxe, l'​opérateur ''​operator ++(int)''​ correspond à la seconde syntaxe. Ce qui se traduit par : <​code>​ </​code>​ \\ \\ Il faut désormais implanter les opérateurs d'​incrémentation de l'​itérateur (ie. pour passer à la valeur suivante). C'est l'​opérateur ''​++''​ qui a est sélectionné,​ cependant cet opérateur possède deux syntaxes : (1) ''​++it''​ qui signifie applique l'​opération ''​++''​ à l'​objet ''​it''​ et retourne une référence à cet objet après que l'​opération ''​++''​ a été effectuée; (2) ''​it++''​ qui signifie fait une copie de l'​objet //copy//, applique l'​opération à l'​objet ''​it''​ et retourne l'​objet //copy// comme résultat de l'​opération. L'​opérateur ''​operator ++()''​ correspond à la première synataxe, l'​opérateur ''​operator ++(int)''​ correspond à la seconde syntaxe. Ce qui se traduit par : <​code>​
-    iterator&​ operator()+    iterator&​ operator++()
     {     {
         // Passe à la valeur suivant si nous ne sommes pas         // Passe à la valeur suivant si nous ne sommes pas
         // déjà à la fin de l'​interval.         // déjà à la fin de l'​interval.
-        if(mCurrent < mInterval->​maxValue)+        if(mCurrent <mInterval->​maxValue)
             mCurrent ++;             mCurrent ++;
         return *this;         return *this;
     }     }
-    iterator operator()+    iterator operator++(int)
     {     {
-        ​iterator ​it(*this); // Crée une copie de l'​itérateur.+        ​interval_iterator ​it(*this); // Crée une copie de l'​itérateur.
         ++(*this); ​         // Incrément l'​itérateur courant en appellant         ++(*this); ​         // Incrément l'​itérateur courant en appellant
                             // l'​opérateur iterator&​ operator()                             // l'​opérateur iterator&​ operator()
Line 296: Line 297:
     }     }
 </​code>​ \\ Il ne reste plus qu'à implanter les opérateurs relatifs à la comparaison. Deux itérateurs sont égaux s'ils font références à la même valeur située dans le même containeur. Dans ce cas, nous devons avoir les champs ''​mCurrent''​ et ''​mInterval''​ qui doivent être égaux. <code cpp> </​code>​ \\ Il ne reste plus qu'à implanter les opérateurs relatifs à la comparaison. Deux itérateurs sont égaux s'ils font références à la même valeur située dans le même containeur. Dans ce cas, nous devons avoir les champs ''​mCurrent''​ et ''​mInterval''​ qui doivent être égaux. <code cpp>
-    bool operator ==(const ​iterator& anotherIterator) const+    bool operator ==(const ​interval_iterator& anotherIterator) const
     {     {
         return mCurrent == anotherIterator.mCurrent && ​         return mCurrent == anotherIterator.mCurrent && ​
           *mInterval == *anotherIterator.mInterval;​           *mInterval == *anotherIterator.mInterval;​
     }     }
-    bool operator !=(const ​iterator& anotherIterator) const+    bool operator !=(const ​interval_iterator& anotherIterator) const
     {     {
         return mCurrent != anotherIterator.mCurrent ||          return mCurrent != anotherIterator.mCurrent || 
Line 318: Line 319:
     // l'​itérateur courant fait référence au même élément que l'​itérateur     // l'​itérateur courant fait référence au même élément que l'​itérateur
     // passé en argument.     // passé en argument.
-    ​iterator ​operator=(const interval_iterator&​ anotherIterator)+    ​interval_iterator& ​operator=(const interval_iterator&​ anotherIterator)
     {     {
         mCurrent = anotherIterator.mCurrent;​         mCurrent = anotherIterator.mCurrent;​
         mInterval = anotherIterator.mInterval;​         mInterval = anotherIterator.mInterval;​
 +        return *this;
     }      } 
     // Opération de permutation. ​     // Opération de permutation. ​
Line 331: Line 333:
     void swap(interval_iterator&​ anotherIterator)     void swap(interval_iterator&​ anotherIterator)
     {     {
-        std::​swap(mCurrent, ​anotherInterator.mCurrent);​ +        std::​swap(mCurrent, ​anotherIterator.mCurrent);​ 
-        std::swpa(mInterval, anotherIterator.mInterval);​+        std::swap(mInterval, anotherIterator.mInterval);​
     }     }
 </​code>​ \\ Et normalement l'​ensemble des éléments ont été définis pour à la classe ''​interval_iterator''​ pour que ce dernier puisse répondre aux exigences auxquelles un itérateur de type [[https://​en.cppreference.com/​w/​cpp/​named_req/​ForwardIterator|forward iterator]] doit répondre. ​     </​code>​ \\ Et normalement l'​ensemble des éléments ont été définis pour à la classe ''​interval_iterator''​ pour que ce dernier puisse répondre aux exigences auxquelles un itérateur de type [[https://​en.cppreference.com/​w/​cpp/​named_req/​ForwardIterator|forward iterator]] doit répondre. ​    
 +
 </​hidden>​ </​hidden>​
  
Line 392: Line 395:
  
 <hidden Explications>​ <hidden Explications>​
 +<nodisp 2>
 +
  
   * La fonction ''​print''​ prend une séquence d'​éléments définie par un itérateur de début ''​beginIt''​ et un itérateur marquant la fin de la séquence ''​endIt''​ et affiche cette séquence sur la console. La seule particularité,​ c'est qu'en fonction de la position de l'​élément,​ le séparateur ","​ est placé entre les valeurs ou non.   * La fonction ''​print''​ prend une séquence d'​éléments définie par un itérateur de début ''​beginIt''​ et un itérateur marquant la fin de la séquence ''​endIt''​ et affiche cette séquence sur la console. La seule particularité,​ c'est qu'en fonction de la position de l'​élément,​ le séparateur ","​ est placé entre les valeurs ou non.
Line 409: Line 414:
 </​code>​ </​code>​
  
 +</​nodisp>​
 </​hidden>​ </​hidden>​
  
  
in204/tds/sujets/td4/part2.1571139331.txt.gz · Last modified: 2019/10/15 11:35 by bmonsuez